【问题标题】:Permission Denial: requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission() (API 23)权限拒绝:需要 android.permission.READ_EXTERNAL_STORAGE 或 grantUriPermission() (API 23)
【发布时间】:2016-10-10 11:43:08
【问题描述】:

我正在尝试在运行时请求用户权限。 API 是 23,我想从手机的图库中获取图像。在一些 sn-ps 之后,这是我到目前为止的代码:

在我检查的Activity的onCreate()中:

if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) !=
            PackageManager.PERMISSION_GRANTED) {
        imageUploader5.setEnabled(true);
        ActivityCompat.requestPermissions(this, new String[]
                { Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE }, 0);
    }

然后我覆盖:

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == 0) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED
                && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
            imageUploader5.setEnabled(true);
        }
    }
}

但我仍然无法让应用在 AVD 上运行。

编辑:清单中的权限:

<uses-permission-sdk-23 android:name="android.permission.CAMERA" />
<uses-permission-sdk-23 android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission-sdk-23 android:name="android.permission.READ_EXTERNAL_STORAGE" />

【问题讨论】:

  • 在您的清单文件上添加权限.....
  • 我有,更新了我上面的问题。

标签: android android-permissions android-external-storage


【解决方案1】:

根据您构建if 语句的方式,您将仅在已授予用户权限的情况下请求用户权限。添加else 块,如下所示:

// Enable if permission granted
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) ==
        PackageManager.PERMISSION_GRANTED) {
    imageUploader5.setEnabled(true);
} 
// Else ask for permission
else {
    ActivityCompat.requestPermissions(this, new String[]
            { Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE }, 0);
}

编辑

在清单中概括您的 user-permission(不带 -sdk-23 后缀),以便它可以被不同的和未来的 API 级别使用:

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

【讨论】:

  • 非常感谢!完美运行!
【解决方案2】:
defaultConfig {
    applicationId "com.myapp"
    minSdkVersion 11
    targetSdkVersion 22
    versionCode 1
    versionName "1.0"
}

只会这样做。注意 targetSdkVersion 22

【讨论】:

    【解决方案3】:

    您检查权限如下

    public static int REQUEST_STORAGE_PERMISSION = 122;
    
     if (checkStoragePermission()) {
          imageUploader5.setEnabled(true);
      } else {
           requestStoragePermission();
      }
    
    
    
     private boolean checkStoragePermission() {
        return ActivityCompat.checkSelfPermission(RegisterActivity.this,
                Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
    }
    
    private void requestStoragePermission() {
        ActivityCompat.requestPermissions(RegisterActivity.this,
                new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                REQUEST_STORAGE_PERMISSION);
    }
    
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == REQUEST_STORAGE_PERMISSION) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                imageUploader5.setEnabled(true);
            } else {
                imageUploader5.setEnabled(false);
    
            }
        }
    }
    

    【讨论】:

      【解决方案4】:

      下面的权限类链接:-

      https://jeeteshsurana.blogspot.com/2017/07/permission-class-pass-activity.html

      创建Sperate类并调用

      PermissionClass.checkAndRequestPermissions(this);

      // 如果片段则替换 thisgetActivity()

      它会自动获得权限

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-23
        • 2020-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-22
        • 2014-01-01
        • 1970-01-01
        相关资源
        最近更新 更多