2011-08-04 136 views
6

我設置了以下我的Android清單:sd.canWrite()始終返回false

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

我有我的活動如下:

File sd = Environment.getExternalStorageDirectory(); 
boolean can_write = sd.canWrite(); 

SD返回到/ mnt/sdcard

我正在測試我的設備(evo 3d)而不是模擬器。 SD卡已安裝。它只發生在充電模式和USB電纜沒有插入時。谷歌和堆棧上的帖子上的各種頁面顯示完全相同的方法來檢查SD卡是否可寫,所以我必須錯過一些東西。

UPDATE:

我試試下面的代碼,並拋出IOException異常權限被拒絕。

File TestFile = new File(sd + "/testfile.txt"); 
    try { 
     boolean result = TestFile.createNewFile(); 
     if(result) 
     { 
      Log.i("tag","successfully created file"); 
     } else { 
      Log.i("tag","failed to create file"); 
     } 
    } catch (IOException e) { 
     Log.e("tag",e.toString() + " " + TestFile); 
     return false; 
    } 

我已經格式化了我的SD卡,重新安裝了它,然後重新啓動手機,仍然有相同的錯誤。

UPDATE

顯然,這是我自己的無知,導致它失敗。我在我的清單的錯誤部分有我的權限塊。再次感謝:)

+0

通常它抱怨,如果事情是放錯了地方的原因。你把權限放在哪裏? –

+0

哪裏可以使用persistence?先謝謝你。 – twlkyao

回答

13

我不會用sd.canWrite(),實際上,我會用這樣的:

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); 
} 

從這裏摘自:HTTP://www.xinotes.org/notes/NOTE/1270/

+1

你真棒。謝謝:)任何解釋爲什麼.canWrite()方法不能按預期工作? – matt

0

canWrite()方法顯示的是假的默認目錄,這是按照我的觀察不知道它背後