【发布时间】:2016-03-02 03:25:57
【问题描述】:
我正在编写的 Android 应用程序遇到了一个相当奇怪的问题。
在我的应用中,我使用意图告诉手机的相机应用为我拍照。拍完这张照片后,我想向设备的 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。
【问题讨论】:
-
这是在安卓棉花糖上运行的吗?
-
您不需要存储权限 - 您可以在 Lollipop+ 设备上将文件写入getExternalMediaDirs() 返回的目录。
-
是的,我在 Mashmallow 6.0.1 上运行。
-
你的 targetSdk 是什么?
标签: android