Android:设备不接受WRITE_EXTERNAL_STORAGE权限

时间:2016-03-02 03:25:58

标签: android

我正在写一个我正在编写的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。{/ p>中进入相机应用通常放置的位置

2 个答案:

答案 0 :(得分:0)

您也应该将android:maxSdkVersion="18"添加到WRITE_EXTERNAL_STORAGE。您的代码应如下所示:

<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"
android:maxSdkVersion="18" />

答案 1 :(得分:0)

这可能是您请求权限但未被用户授予权限的问题。看看我的答案@ https://stackoverflow.com/a/35574084/529691

看看是否有帮助。