我正在写一个Android应用程序时出现一个相当奇怪的问题。Android:WRITE_EXTERNAL_STORAGE权限未被设备接受
在我的应用程序中,我使用意图告诉手机的相机应用程序为我拍照。拍完这张照片后,我想将新拍摄的照片注册到设备的MediaStore内容提供商,以便在常规“图库”应用中显示。
要做到这一点,我知道我需要WRITE_EXTERNAL_STORAGE权限,但即使它在我的清单中,我也会得到权限被拒绝的异常。我必须做些什么才能获得此许可?我正在运行Android 6.0.1。
这里是我的权限XML在清单:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="18" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
下面是导致异常的代码:
// insert photo into phone's main photo content provider
ContentResolver cr = getActivity().getContentResolver();
try {
MediaStore.Images.Media.insertImage(cr, photoFile.getPath(),
"Image Capture", "Custom Image capture");
} catch (FileNotFoundException foe) {
Log.e(DEBUG, foe.getMessage());
}
而这里的例外,我得到:
java.lang.SecurityException: Permission Denial: writing com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=2436, uid=10041 requires android.permission.WRITE_EXTERNAL_STORAGE, or grantUriPermission()
编辑:我应该提一下:
现在我的应用程序使用getExternalFilesDir(Environment.DIRECTORY_PICTURES)
,它返回路径/sdcard/Android/data/<package>/files/Pictures
来保存它的照片。我希望他们去摄像机应用程序通常放置在/sdcard/DCIM/Camera
。
是一本运行android棉花糖? – JoxTraex
您不需要存储权限 - 您可以将该文件写入由[getExternalMediaDirs()](http://developer.android.com/reference/android/content/Context.html#getExternalMediaDirs())返回的目录中在棒棒糖+设备上。 – ianhanniballake
是的,我在Mashmallow 6.0.1上运行。 – RGrun