【问题标题】:Android: WRITE_EXTERNAL_STORAGE permission not accepted by deviceAndroid:设备不接受 WRITE_EXTERNAL_STORAGE 权限
【发布时间】: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/&lt;package&gt;/files/Pictures 来保存它的照片。我希望他们去相机应用程序通常放置他们的地方,/sdcard/DCIM/Camera

【问题讨论】:

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

标签: android


【解决方案1】:

您也应该将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" />

【讨论】:

    【解决方案2】:

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

    看看有没有帮助。

    【讨论】:

      【解决方案3】:

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

          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);
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多