2012-03-13 53 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中各种有用信息位的副本;使用命令的绝对路径修复了问题。

感谢您帮忙解决问题。