getExternalStoragePublicDirectory提供的路径在Android 5.0上不起作用

时间:2015-03-16 12:09:58

标签: android

我想将图片存储在设备的照片目录中。我用

path = Environment.getExternalStoragePublicDirectory(
                    Environment.DIRECTORY_PICTURES);

调用此方法后,在我的S3(Android 4.3)上,路径包含" / storage / emulated / 0 / Pictures"。当我尝试在此目录中创建文件时,它可以正常工作。我用

File.createTempFile(
            imageFileName, ".jpg", path);

为此。 我使用Android 5.0在Galaxy S5和模拟器上进行了测试。在模拟器上,路径包含" / storage / sdcard / Pictures"。当我尝试在其中创建一个文件时,我得到一个" java.io.IOException:open failed:ENOENT(没有这样的文件或目录)"。我的模拟器启用了SD卡支持。 S5没有SD卡。也许这就是设备问题的原因。我在清单中使用了WRITE_EXTERNAL_STORAGE权限。我甚至尝试使用file.mkdirs()来确保路径存在。但这也行不通。

1 个答案:

答案 0 :(得分:1)

我终于找到了解决方案: 在我的AndroidManifest.xml中,我使用了:

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

因为doku中的这些信息:

  

例如,从Android 4.4(API级别19)开始,它不再是   您的应用需要WRITE_EXTERNAL_STORAGE   您的应用想要写入自己的权限   外部存储上的特定于应用程序的目录(目录   由getExternalFilesDir()提供。但是,许可是   API级别18及更低级别所需。

我误解了这样一个事实,即如果我想写入图片目录,我仍然需要此权限,即使在API&gt; 19.所以我删除了这个标签并且有效。