Android SD卡写入失败,但不一致



我在安卓2.3上遇到了一个相当棘手的问题:我有一个应用程序,它收集各种日志用于调试和支持目的(我的公司为坚固的硬件开发Linux),最近因为无法写入SD卡而停止工作。以下是我看到的症状和我进行的调查:

  • 发生在具有不同SD卡的多种类型的多个设备上,所有这些设备都已检查文件系统是否损坏(未发现问题)
  • 所有设备报告:Environment.getExternalStorageState()等于Environment.MEDIA_INSTALLED
  • 所有设备还报告Environment.getExternalStorageDirectory().getAbsolutePath().canWrite()为false
  • 通过PackageManager.checkPermission(),我的应用程序报告它具有WRITE_EEXTERNAL_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运行,但运气不佳。有人有什么想法吗?

事实证明,这部分是我的错误诊断,部分是2.1到2.3的明显变化。

错误的诊断是,上面的目录确实正在创建中。2.1和2.3之间的明显变化可能是Android内部的,也可能是我们在自己的构建中设置路径、PATH和符号链接的方式。在原始文章中的代码后面,有一些对exec()的调用,例如从logcat获得输出,以及/proc中各种有用信息的副本;使用命令的绝对路径解决了这个问题。

谢谢你帮我排除问题。

最新更新