我在android 4.4设备上写入sd卡时遇到问题。我正在编写一个使用getExternalFilesDirs()方法获取到SD卡上其目录路径的应用程序。但是,当我尝试将数据存储在目录中时,出现错误:
EACCES (Permisson denied)
内部存储器和sd卡中Android / data /中的应用程序目录由不同的Linux用户拥有。我设备上的任何其他应用程序都可以正常运行。该应用程序可以在具有该SD卡的其他设备上运行。
答案 0 :(得分:0)
您需要在AndroidManifest.xml中添加此权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
答案 1 :(得分:0)
我认为您放错了这行。 仔细检查此行
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
您将这一行放在哪里?
此行应在<application/>
范围之外
像这样
<manifest>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
...
<application>
...
<activity>
...
</activity>
</application>
</manifest>
要使getExternalFilesDirs返回sdcard的路径,OEM必须已在设备特定的init.rc文件中设置SECONDARY_STORAGE环境变量,如下所述:https://source.android.com/devices/storage/config-example.html
在此处查看getExternalFilesDirs的来源:http://androidxref.com/5.1.1_r6/xref/frameworks/base/core/java/android/app/ContextImpl.java#1039
该值是从Environment.buildExternalStorageAppFilesDirs获得的。在此处查看该来源:http://androidxref.com/5.1.1_r6/xref/frameworks/base/core/java/android/os/Environment.java#206
该值取决于mExternalDirsForApp,后者通过读取SECONDARY_STORAGE变量:http://androidxref.com/5.1.1_r6/xref/frameworks/base/core/java/android/os/Environment.java#136
的内容进行填充如您所见,如果未设置SECONDARY_STORAGE变量,则不会返回sdcard路径。您可以通过转至adb shell并查看echo $ SECONDARY_STORAGE的输出来进行交叉检查
答案 2 :(得分:0)
使用 getExternalFilesDir()
它返回到二级存储SD卡上Android / data / data / your_package /中文件文件夹的路径。它用于存储应用程序所需的任何文件(例如,从网络下载的图像或缓存文件)。卸载该应用后,该文件夹中存储的所有数据也将消失。
在这里您可以将文件写入辅助存储(即您的微型SD卡)
如果要在外部存储或辅助存储的根目录上写入,则必须使用存储访问框架。