Android:设备不接受写入\u外部\u存储权限

Android:设备不接受写入\u外部\u存储权限,android,Android,我正在写的Android应用程序有一个相当奇怪的问题 在我的应用程序中,我使用意图来告诉手机的照相应用程序为我拍照。拍摄完这张照片后,我想向设备的MediaStore内容提供商注册新拍摄的照片,以便在常规的“多媒体资料”应用程序中显示 要做到这一点,我知道我需要WRITE_EXTERNAL_存储权限,但即使它在我的清单中,我也会得到一个权限拒绝异常。我要怎么做才能得到这个许可?我正在运行安卓6.0.1 以下是清单中的我的权限XML: <uses-permission android:nam

我正在写的Android应用程序有一个相当奇怪的问题

在我的应用程序中,我使用意图来告诉手机的照相应用程序为我拍照。拍摄完这张照片后,我想向设备的MediaStore内容提供商注册新拍摄的照片,以便在常规的“多媒体资料”应用程序中显示

要做到这一点,我知道我需要WRITE_EXTERNAL_存储权限,但即使它在我的清单中,我也会得到一个权限拒绝异常。我要怎么做才能得到这个许可?我正在运行安卓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" />
这是我得到的一个例外:

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\u PICTURES)
,它返回路径
/sdcard/Android/data//files/PICTURES
,以保存照片。我想让他们去相机应用程序通常放置他们的地方,在
/sdcard/DCIM/camera
中,你也应该将
安卓:maxSdkVersion=“18”
添加到WRITE\u外部存储中。您的代码应该如下所示:

<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" />

这可能是您请求权限但未被用户授予权限的问题。看看我的答案@


然后看看这是否有帮助。

您应该提示用户向您提供权限:

    int externalPermissionCheck = ContextCompat.checkSelfPermission(this,
            Manifest.permission.WRITE_EXTERNAL_STORAGE);
    if (externalPermissionCheck==-1){
        askPermissionStorage();
    }


private void askPermissionStorage() {
    //for media
    if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.
            WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {

        //insert explanation
        if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
            //if you want to explaian to the user

        } else {//if no explanation needed
            ActivityCompat.requestPermissions(this, new
                            String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                    MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
        }
    }
}
    int cameraPermissionCheck = ContextCompat.checkSelfPermission(this,
            Manifest.permission.CAMERA);
    if (cameraPermissionCheck == -1) {
        askPermissionCamera();
    }
private void askPermissionCamera() {
    //for camera
    if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.
            CAMERA) != PackageManager.PERMISSION_GRANTED) {
        //insert explanation
        if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                Manifest.permission.CAMERA)) {
            //if you want to explaian to the user

        } else {//if no explanation needed
            ActivityCompat.requestPermissions(this, new
                            String[]{Manifest.permission.CAMERA},
                    MY_PERMISSIONS_REQUEST_CAMERA);
        }
    }
}
以上内容用于保存图片\视频 这是为了相机许可:

    int externalPermissionCheck = ContextCompat.checkSelfPermission(this,
            Manifest.permission.WRITE_EXTERNAL_STORAGE);
    if (externalPermissionCheck==-1){
        askPermissionStorage();
    }


private void askPermissionStorage() {
    //for media
    if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.
            WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {

        //insert explanation
        if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
            //if you want to explaian to the user

        } else {//if no explanation needed
            ActivityCompat.requestPermissions(this, new
                            String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                    MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
        }
    }
}
    int cameraPermissionCheck = ContextCompat.checkSelfPermission(this,
            Manifest.permission.CAMERA);
    if (cameraPermissionCheck == -1) {
        askPermissionCamera();
    }
private void askPermissionCamera() {
    //for camera
    if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.
            CAMERA) != PackageManager.PERMISSION_GRANTED) {
        //insert explanation
        if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                Manifest.permission.CAMERA)) {
            //if you want to explaian to the user

        } else {//if no explanation needed
            ActivityCompat.requestPermissions(this, new
                            String[]{Manifest.permission.CAMERA},
                    MY_PERMISSIONS_REQUEST_CAMERA);
        }
    }
}

这是在android棉花糖上运行的吗?您不需要存储权限-您可以将文件写入Lollipop+设备上返回的目录。是的,我在Mashmallow 6.0.1上运行。您的targetSdk是什么?