getExternalFilesdir失败

时间:2015-08-05 11:38:41

标签: android android-file

OnActivityCreated我正在做:

activity.getExternalFilesDir(Environment.DIRECTORY_PICTURES);

在logcat中我得到:

com.package W/ContextImpl﹕ Failed to ensure directory: /storage/sdcard1/Android/data/com.package/files/Pictures

仅在LOLLIPOP(MOTO G 2014)上发生这种情况,KITKAT(Nexus 4)上的一切都很好。我在清单上有 WRITE_EXTERNAL_STORAGE 。 我在这里错过了什么?存储可以通过文件浏览应用程序(如ES Explorer)安装和访问。

编辑:令人惊讶的是,即使我收到上面报告的警告,也会在目录下正确创建文件。

3 个答案:

答案 0 :(得分:3)

试试这个:

String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);

并使用此权限:

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

实际上:

getExternalFilesDir()

它返回SD卡上/Android/data/com.package/files/Pictures内文件夹的路径。并且其中没有名为Pictures的文件夹。所以你得到了这个错误。

答案 1 :(得分:0)

如果您正在使用Android 2.1或之后进行开发,请使用

getExternalFilesDir(String type) 

仔细阅读https://developer.android.com/guide/topics/data/data-storage.html#filesExternal

此外,您还需要使用此方法或类似的方法

boolean mExternalStorageAvailable = false;
boolean mExternalStorageWriteable = false;
String state = Environment.getExternalStorageState();

if (Environment.MEDIA_MOUNTED.equals(state)) {
    // We can read and write the media
    mExternalStorageAvailable = mExternalStorageWriteable = true;
} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
    // We can only read the media
    mExternalStorageAvailable = true;
    mExternalStorageWriteable = false;
} else {
    // Something else is wrong. It may be one of many other states, but all we need
    //  to know is we can neither read nor write
    mExternalStorageAvailable = mExternalStorageWriteable = false;
}

然后检查您是否可以访问SD卡。如上所述,请阅读官方文档。

您必须从SD卡进入目录(文件对象)并制作特定的文件路径,例如:

Environment.getExternalStorageDirectory(Environment.DIRECTORY_PICTURES);

还需要在清单文件中给予权限

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

答案 2 :(得分:0)

我在一台设备上遇到了类似的问题。 Android版本是5.1.1(api 22) 我在清单中发现的许可被添加如下。

<uses-permission
    android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    android:maxSdkVersion="18"/>

我删除了maxSdkVersion限制,然后解决了问题。

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

之前我添加了maxSdkVersion,因为我读过的某个地方就像18岁或更早的API需要这个权限,但似乎并非如此。它因设备而异。

如果您的清单中有相同的权限设置,这可能会对您有所帮助。