访问Samsung Galaxy Note 3 KitKat(4.4.x)上的SD卡时出错

时间:2014-02-03 19:38:33

标签: android sd-card android-sdcard ioexception galaxy

由于Samsung将Note 3更新为4.4.x,因此在写入SD卡时出现以下异常:

java.io.IOException: open failed: EACCES (Permission denied)
at java.io.File.createNewFile(File.java:946)
at java.io.File.createTempFile(File.java:1011)

我的应用有必要的写作权限:

<manifest ...>
    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="19"/>

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

创建崩溃的代码如下所示:

tempFile = File.createTempFile("anMoney", null, destinationFile.getParentFile());

destionatioFile指向SD卡上的文件,因此其父文件是文件夹。

错误似乎只发生在Note 3设备上,其他三星或非三星设备工作正常。所以这闻起来就像一个Note 3 bug,但是我可以做一些解决方法吗?

4 个答案:

答案 0 :(得分:3)

这是一个错误,似乎仅限于几个三星型号。即注3(N9005)。

/system/etc/security/permissions.xml

中缺少media_rw权限
<permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
<group gid="sdcard_r" />
<group gid="sdcard_rw" />
<group gid="media_rw" />
</permission>

你需要扎根修复它

答案 1 :(得分:1)

这可能是基于对Android external storage specs

的严格解释的预期行为
  

WRITE_EXTERNAL_STORAGE权限只能授予对其的写访问权限   设备上的主要外部存储。不得允许应用   写入辅助外部存储设备,除了它们   合成权限允许的特定于程序包的目录。

如果您允许用户自己输入路径,他们可能会选择应用程序包特定目录之外的内容。在这种情况下,文件写入/创建/删除将失败。

答案 2 :(得分:1)

有很多文章都在谈论这个问题,因为谷歌和三星现在不允许第三方应用程序写入SD卡,除非他们写入指定的路径。

以下是一些关于它的链接:

答案 3 :(得分:0)

Android 4.4之前的Android SDK从未正式支持对可移动存储的访问,但许多开发人员选择忽略它。

Android 4.4通过getExternalFilesDirs()等方法为应用程序添加了一些有限的支持,可以访问可移动存储(注意复数)。与此同时,there are reports that some of the alternative ways that developers would work with removable storage are now locked down。由于我不使用可移动存储,我没有尝试重现这些结果。