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 {
   		//正常的业务处理逻辑
   }
相关推荐
q***577416 分钟前
MySql的慢查询(慢日志)
android·mysql·adb
JavaNoober41 分钟前
Android 前台服务 "Bad Notification" 崩溃机制分析文档
android
城东米粉儿1 小时前
关于ObjectAnimator
android
zhangphil2 小时前
Android渲染线程Render Thread的RenderNode与DisplayList,引用Bitmap及Open GL纹理上传GPU
android
火柴就是我3 小时前
从头写一个自己的app
android·前端·flutter
lichong9514 小时前
XLog debug 开启打印日志,release 关闭打印日志
android·java·前端
用户69371750013845 小时前
14.Kotlin 类:类的形态(一):抽象类 (Abstract Class)
android·后端·kotlin
火柴就是我5 小时前
NekoBoxForAndroid 编译libcore.aar
android
Kaede66 小时前
MySQL中如何使用命令行修改root密码
android·mysql·adb
明君879977 小时前
Flutter 图纸标注功能的实现:踩坑与架构设计
android·ios