Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
getExternalStoragePublicDirectory提供的路径在Android 5.0上不起作用_Android - Fatal编程技术网

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

getExternalStoragePublicDirectory提供的路径在Android 5.0上不起作用,android,Android,我想在设备的照片目录中存储一张图片。我用 path = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES); 调用此方法后,在我的S3(Android 4.3)上,路径包含“/storage/simulated/0/Pictures”。当我尝试在这个目录中创建一个文件时,它可以工作。我用 File.createTempFile(

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

path = Environment.getExternalStoragePublicDirectory(
                    Environment.DIRECTORY_PICTURES);
调用此方法后,在我的S3(Android 4.3)上,路径包含“/storage/simulated/0/Pictures”。当我尝试在这个目录中创建一个文件时,它可以工作。我用

File.createTempFile(
            imageFileName, ".jpg", path);
为了这个。
我在Galaxy S5和仿真器上进行了测试,两者都使用Android 5.0。在emulator上,路径包含“/storage/sdcard/Pictures”。当我试图在其中创建一个文件时,我得到一个“java.io.IOException:openfailed:enoint(没有这样的文件或目录)”。我的模拟器已启用SD卡支持。S5没有SD卡。也许这就是设备出现问题的原因。我在清单中使用权限写入外部存储。我甚至尝试使用file.mkdirs()来确保路径存在。但这也不起作用。

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

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

由于以下信息:

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


我误解了这样一个事实:如果我想写入图片目录,我仍然需要这个权限,即使在API>19中也是如此。所以我去掉了这个标签,它就工作了。

看这个:路径是否真的存在于手机上,S5?Milad,这描述了我的问题,但没有给出答案。Jared,很遗憾,我无法在此设备上检查它,因为它不是我自己的。@JaredBurrows-请注意,您只能从其他应用程序(如文件管理器)验证这样的路径。ADB将看到外部存储安装在不同的位置,而不是应用程序看到的位置。@ChrisStratton您的评论与此无关。您只需尝试使用Android API
环境。getExternalStoragePublicDirectory
并在创建文件之前检查目录是否存在,然后再创建文件,或者您可以指定自己的位置并执行相同操作。非常有帮助。。。在阅读本文档时,您可能会错过一些内容。