Android 13以上版本读写SD卡权限适配

在这里插入图片描述

如题,最近工作上处理的问题,把解决方案简单逻列出来,供有需要的朋友参考之
解决方案:
1、配置权限

  <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
   <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
   <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
   <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32"/>
   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32"/>

2、动态申请权限

//相关核心代码,PermissionUtils工具类
 private static final String[] RECORDING_PERMISSION_ABOVE_33 = {
            Manifest.permission.CAMERA,
            Manifest.permission.RECORD_AUDIO,
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE
    };

    //Android 13以后的版本,包括13
    private static final String[] RECORDING_PERMISSION_UNDER_33 = {
            Manifest.permission.CAMERA,
            Manifest.permission.RECORD_AUDIO,
            Manifest.permission.READ_MEDIA_VIDEO,
            Manifest.permission.READ_MEDIA_IMAGES,
            Manifest.permission.READ_MEDIA_AUDIO,
    };

    public static String[] getRecordingPermission() {
        return android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU
                ? RECORDING_PERMISSION_ABOVE_33 : RECORDING_PERMISSION_UNDER_33;
    }

    /**
     * 检查多个权限
     * <p>
     * 检查权限
     *
     * @param permissions 权限数组
     * @param context     Context
     * @return true 已经拥有所有check的权限 false存在一个或多个未获得的权限
     */
    public static boolean checkPermissionsGroup(Context context, String[] permissions) {

        for (String permission : permissions) {
            if (!checkPermission(context, permission)) {
                return false;
            }
        }
        return true;
    }

    public static void requestPermissions(Activity activity, String[] permissions, int requestCode) {
        // 先检查是否已经授权
        if (!checkPermissionsGroup(activity, permissions)) {
            ActivityCompat.requestPermissions(activity, permissions, requestCode);
        }
    }

使用示例

 String[] permissions = PermissionUtils.getRecordingPermission();
  if (!checkResult) {
            PermissionUtils.requestPermissions(this, permissions, PERMISSION_REQUEST_CODE);
   } else {
   		//正常的业务处理逻辑
   }

相关推荐

  1. android11以上SD存储权限申请问题

    2024-01-30 14:52:01       49 阅读
  2. Android 10 】隐私权限变更

    2024-01-30 14:52:01       47 阅读
  3. Android所有版本的存储权限

    2024-01-30 14:52:01       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-30 14:52:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-30 14:52:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-30 14:52:01       82 阅读
  4. Python语言-面向对象

    2024-01-30 14:52:01       91 阅读

热门阅读

  1. VA_LIST可变参数列表使用学习

    2024-01-30 14:52:01       53 阅读
  2. 正则表达式 grep

    2024-01-30 14:52:01       52 阅读
  3. STM32 1-5

    STM32 1-5

    2024-01-30 14:52:01      44 阅读
  4. 【iOS ARKit】光照效果--光源

    2024-01-30 14:52:01       52 阅读
  5. C. Did We Get Everything Covered?

    2024-01-30 14:52:01       56 阅读
  6. k8s默认seccomp禁用研究

    2024-01-30 14:52:01       62 阅读