2012-02-13 89 views
1

我有一個裝有Android 4.0的Samsung Nexus S設備。我試圖在SD卡上的現有文件夾中創建一個文件,並獲得「拒絕權限」。在下面的代碼中,exists()返回true,但canWrite()返回false。爲什麼?Samsung Nexus S android 4.0:無法在SD卡中創建文件dir

File exst = Environment.getExternalStorageDirectory(); 
    String exstPath = exst.getPath(); 


       File d = new File(exstPath+"/TestDir/"); 
       if (!d.exists()) 
       { 
        int b = 1; 
       } 
       if (!d.canWrite()) 
       { 
        int a = 1; 
       } 

順便說一下,我已將<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />添加到清單,但沒有幫助。

回答

0

手機是否插入電腦?如果是這樣,電腦將控制SD卡並且不允許它被寫入。如果是這種情況,請嘗試將連接模式更改爲「僅收費」。

+0

我認爲它在4.0上有點不同於2.3。當我連接時,它不提供「PC模式」,「USB存儲」,「僅充電」等4個選項。它只是詢問我是否要打開或關閉USB存儲。我將一些文件複製到SD卡上,爲此我必須打開USB存儲設備。然後我關閉它,以便能夠從我的PC啓動和調試我的應用程序。 – 2012-02-13 21:29:39

0

追加getAbsolutePath()到您的第一線,那麼它應該工作:

File exst = Environment.getExternalStorageDirectory().getAbsolutePath(); 

更新:

回顧我自己的代碼和其他SO答案,我相信你不使用canWrite檢查一個路徑可以在SD卡上寫入。而是使用Environment.MEDIA_MOUNTED:

String state = Environment.getExternalStorageState(); 
if (Environment.MEDIA_MOUNTED.equals(state)) { 
    Log.d("Test", "sdcard mounted and writable"); 
} 
else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { 
    Log.d("Test", "sdcard mounted readonly"); 
} 
else { 
    Log.d("Test", "sdcard state: " + state); 
} 
+0

嘗試過,結果相同 – 2012-02-14 02:47:38

+0

已更新的答案。還要確保WRITE_EXTERNAL_STORAGE權限位於清單文件的正確部分。 – 2012-02-14 22:35:41

0

儘管所有的答案給出部分建議,這個問題很可能三星非標準的API實現

String myPath = Environment.getExternalStorageDirectory().getAbsolutePath ; 
    // or .getName() or .getPath() <-- these don't return everything you need. 
    // same is true for the file version you're trying. 

    // you have to append 

「/ external_sd /」

到文件名前面的路徑。

下面是三星的解釋

http://developer.samsung.com/forum/board/thread/view.do?boardName=GeneralB&messageId=162934&messageNumber=1381&startId=zzzzz~&searchType=TITLE&searchText=sdcard

它也是在幾個SO帖子中提到的API他們的「破」,但我沒有方便的鏈接...

  • H

[編輯於2013年5月中旬]以下是此問題的病理情況:您可以通過各種常規方法獲取path()被提及。然後,只需編寫一個簡單的文件並觀看它顯示在DDMS文件瀏覽器中。嘗試對確切的路徑和文件名進行硬編碼或使用/ external_sd/thing--在這兩種情況下,您將無法再讀取自己的文件! (或者你可能會,但它會包含垃圾。)我們已經在三種不同的S3手機上驗證了這一點。將通過RemoteTestingLab網站在三星「真實」手機上進行更多測試並回報。