2012-03-13 56 views
3

我已經得到了Android 2.3一個相當棘手的問題:我有收集用於調試和支持目的的各種日誌(my company做Linux的堅固的硬件)的應用程序,並已停止工作最近,因爲它沒有寫入SD卡。下面是我見過的症狀和我進行的調查:Android的SD卡寫入失敗,但不能始終如一

  • 是跨多種類型具有不同的SD卡,所有這些都被檢查文件系統損壞(未發現問題)的多臺設備。
  • 所有設備報告:Environment.getExternalStorageState()等於Environment.MEDIA_MOUNTED。
  • 所有這些器件還報告說,Environment.getExternalStorageDirectory()。getAbsolutePath()。canWrite()是假的。
  • 通過PackageManager.checkPermission(),我的應用報告它具有WRITE_EXTERNAL_STORAGE權限。
  • OI文件管理器能夠創建目錄並移動SD卡上的文件;我的應用程序無法做到。

此代碼是足以導致失敗:

String sdcardDirectory = Environment.getExternalStorageDirectory().getAbsolutePath(); 
File directory = new File(sdcardDirectory + "/logger"); 
if(!directory.mkdirs()){ 
    //fails here. 
    Log.w("Logger", "Could not create logger directory."); 
} 

因爲我有機會獲得該設備的鑰匙,我甚至至今爲標誌的平臺關鍵應用程序並運行它去作爲android.uid.system,沒有運氣。有人有主意嗎?

+1

後您使用的是嘗試寫TEH外部SD – bbedward 2012-03-13 13:48:46

+0

爾加的代碼。我只是將它編輯爲原始文章。 – Fishbreath 2012-03-13 14:03:02

+0

如果你的設備上有「adb shell」,你可以在那裏創建文件/目錄嗎? 「ls -la」會告訴你SD卡目錄中的文件/文件夾具有正確的權限嗎? '-rwxrwxrwx 1 1000 1015 0 Mar 13 14:18 file''drwxrwxrwx 2 1000 1015 4096 Mar 13 14:19 folder'就是我所得到的。這些數字(1000和1015)也很重要,並且是'WRITE_EXTERNAL_STORAGE'權限所必需的(1015是Linux中的一個組,每個應用程序獲得該權限時都會獲得該組)。 – zapl 2012-03-13 14:21:06

回答

1

事實證明,這是我的一部分部分不好診斷的情況下,在2.1至2.3部分的明顯改變。

壞的診斷是,上面的目錄確實被創建。 2.1和2.3之間的明顯變化可能是Android內部的,也可能是我們在自己的構建中設置路徑,PATH和符號鏈接的方式。進一步從原始文章中的代碼開始,有幾個調用exec()來獲取例如logcat的輸出和/ proc中各種有用信息位的副本;使用命令的絕對路徑修復了問題。

感謝您幫忙解決問題。