无法在Android上写入SD卡

时间:2018-09-20 03:22:24

标签: android android-sdcard

我在android 4.4设备上写入sd卡时遇到问题。我正在编写一个使用getExternalFilesDirs()方法获取到SD卡上其目录路径的应用程序。但是,当我尝试将数据存储在目录中时,出现错误:

EACCES (Permisson denied)

内部存储器和sd卡中Android / data /中的应用程序目录由不同的Linux用户拥有。我设备上的任何其他应用程序都可以正常运行。该应用程序可以在具有该SD卡的其他设备上运行。

3 个答案:

答案 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卡)

如果要在外部存储或辅助存储的根目录上写入,则必须使用存储访问框架