Android 10(Q)在访问手机SD卡读写权限的问题

2020-11-11  本文已影响0人  TimberBug

安卓应用中对手机SD卡即外部存储的访问是经常的,安卓手机上,在安卓6.0(API 23)以下,访问只需要在清单文件中添加如下权限:

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

在安卓6.0(API 23)及以上系统,考虑到安全,访问手机SD卡时,不但要加上上述权限,还需要在代码中动态申请权限,如下:

private void checkPermissionAndLoadImg() {
    int hasWriteExternalPermission =
        ContextCompat.checkSelfPermission(mContext, Manifest.permission.WRITE_EXTERNAL_STORAGE);
    if (hasWriteExternalPermission == PackageManager.PERMISSION_GRANTED) {
      //TODO 有权限,做自己的后续操作
      
    } else {
      //未授权,申请授权(从相册选择图片需要读取存储卡的权限)
      ActivityCompat.requestPermissions((AppCompatActivity) mContext,
          new String[] { Manifest.permission.READ_EXTERNAL_STORAGE }, RC_REQUEST_PERMISSION);
    }
  }

  //权限申请成功回调中处理后续操作
  @Override
  public void requestPermissionResult(int requestCode, @NonNull String[] permissions,
      @NonNull int[] grantResults) {
    if (requestCode == RC_REQUEST_PERMISSION) {
      //TODO 权限申请成功,做自己的后续操作
    }
  }

在安卓10(API 29)系统以下,按照以上步骤执行后,访问手机SD卡都是可以的,但是在安卓10系统上,安装应用后依然没有权限访问手机SD卡。。。原来是10系统上还需要在清单文件中application节点加上android:requestLegacyExternalStorage="true"属性,示例如下:

<application
    android:name=".MyApplication"
    android:allowBackup="true"
    android:hardwareAccelerated="true"
    android:icon=""
    android:largeHeap="true"
    android:requestLegacyExternalStorage="true">

至此,以上就是应用在访问手机SD卡进行读写操作时所需要的全部权限申请。

上一篇下一篇

猜你喜欢

热点阅读