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

Android 访问三星Galaxy Note 3 KitKat(4.4.x)上的SD卡时出错,android,sd-card,android-sdcard,ioexception,galaxy,Android,Sd Card,Android Sdcard,Ioexception,Galaxy,由于三星将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 a

由于三星将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>
destinoatiofile指向SD卡上的文件,因此其父文件是文件夹


错误似乎只发生在Note 3设备上,其他三星或非三星设备工作正常。这闻起来像是Note 3的bug,但我能做些什么呢?

在Android 4.4之前,Android SDK从未正式支持对可移动存储的访问,尽管许多开发人员选择忽略这一点


Android 4.4通过getExternalFilesDirs等方法增加了对应用程序访问可移动存储的一些有限支持。同时因为我不使用可移动存储,所以我没有尝试重现这些结果。

这是一个错误,似乎仅限于少数三星型号。i、 e.注3 N9005

/system/etc/security/permissions.xml中缺少媒体权限

<permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
<group gid="sdcard_r" />
<group gid="sdcard_rw" />
<group gid="media_rw" />
</permission>

您需要植根才能修复它

这可能是基于对Android的严格解释的预期行为:

写入外部存储权限只能授予对的写入访问权限 设备上的主要外部存储器。不得允许应用程序运行 写入辅助外部存储设备(在其存储设备中除外) 将特定目录打包为综合权限所允许的目录


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

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

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


请显示产生此错误的源代码。我更新了帖子中的崩溃调用。请注意,写入外部存储与任何SD卡都没有多大关系。自2011年以来,在大多数设备上,外部存储尚未作为可移动存储位实现。所以,当你说DestinationIoFile指向SD卡上的一个文件时,它的父文件就是文件夹,你是指一些可移动存储,还是指官方外部存储?这是真正的SD卡。用户可以选择键入路径,而对于那些键入真实SD路径的用户,错误正在发生。这是三星的回应::如果您的SD卡仍被锁定为usb设备,则可能会发生此错误。确保您没有将手机用作usb存储。断开设备与电脑的连接,然后重试。此外,您可能还需要添加以下权限:嗯,不确定如果应用程序无法写入am SD卡,那么使用am SD卡有什么意义。。。。。此外,这似乎只影响注释3。Galaxy S4工作正常。@Tomamoney:不确定如果应用程序无法写入am SD卡有什么意义-设备制造商有权使用可移动存储。而且,只要制造商安排可移动存储上的媒体由MediaStore的媒体扫描程序进行索引,许多应用程序就不需要直接访问可移动存储。谢谢。如果我可以问一下的话,你在哪里找到这些信息的?锁定的外部SD卡只是在我的笔记3上应用KitKat后发生的。我猜这是一个权限问题,无论是在文件级别还是android权限。谷歌的几次网络搜索很快发现了一种模式,我继续尝试了上面提到的解决方案,在重新启动后,一切又恢复正常。顺便说一句,xda开发者论坛对于android开发者来说是一个很好的资源。我认为情况并非如此。三星是目前唯一一家拥有SD卡和KitKat更新的公司。仅提供快速信息,在我的带有自定义ROM的设备上,此目录为\system\etc\permissions\是否有任何API或命令来检查此权限是否属于媒体组?或者更准确地说,有没有办法检查应用程序是否可以写入sd卡上的任何位置?还有,SD卡是做什么用的?它也一样吗?我当然希望不是这样。@Justin现在是官方的:当我两个月前发布这个问题时,没有多少文章讨论这个问题。但是谢谢。老实说,因为你让我听起来好像在问之前我没有做家庭作业。我应该怎么做来修复它?我不是故意这么说的。我只想提到他们。。。
<permission name="android.permission.WRITE_EXTERNAL_STORAGE" >
<group gid="sdcard_r" />
<group gid="sdcard_rw" />
<group gid="media_rw" />
</permission>