美文网首页
Android 10(Q)在访问手机SD卡读写权限的问题

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

作者: TimberBug | 来源:发表于2020-11-11 13:50 被阅读0次

    安卓应用中对手机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卡进行读写操作时所需要的全部权限申请。

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/hxsgvktx.html