getExternalFilesdir失败

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)安装并可访问。

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


尝试这个 :

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文件夹。 所以你得到这个错误。


我只在一台设备上遇到类似的问题。 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,因为在某些地方我读取了API 18或更旧版本所需的权限,但似乎并非如此。 它依设备而异。

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


如果您正在为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卡进入目录(一个File对象)并设置您的特定文件路径,例如:

Environment.getExternalStorageDirectory(Environment.DIRECTORY_PICTURES);

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

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
链接地址: http://www.djcxy.com/p/28015.html

上一篇: getExternalFilesdir Fail

下一篇: Asp.Net 5 Semantic Versioning