由于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,但是我可以做一些解决方法吗?
答案 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。由于我不使用可移动存储,我没有尝试重现这些结果。