Android 13 WRITE_EXTERNAL_STORAGE , READ_EXTERNAL_STORAGE不弹出的问题

解决Android 13 WRITE_EXTERNAL_STORAGE , READ_EXTERNAL_STORAGE不弹出的问题

在Android 13(API 33)之前,加入了如下代码

复制代码
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

如果 compileSdk 设置 32 或者以下,那么就没什么问题。当设置33 或者以上,系统就会自动设置无权限。那在 33 及以上的怎么设置呢?

看下面的代码。

在xml中如下设置

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

动态获取权限的代码如下:

复制代码
 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
            if (checkSelfPermission(REQUESTED_PERMISSIONS[0], PERMISSION_REQ_ID)
             &&  checkSelfPermission(REQUESTED_PERMISSIONS[1], PERMISSION_REQ_ID)
                    &&  checkSelfPermission(REQUESTED_PERMISSIONS[3], PERMISSION_REQ_ID ) 
                    &&  checkSelfPermission(REQUESTED_PERMISSIONS[4], PERMISSION_REQ_ID ) 
                    &&  checkSelfPermission(REQUESTED_PERMISSIONS[5], PERMISSION_REQ_ID )) {
        // 获取到权限,开始你的代码
            }
        } else  {
            if (checkSelfPermission(REQUESTED_PERMISSIONS[0], PERMISSION_REQ_ID) 
            &&  checkSelfPermission(REQUESTED_PERMISSIONS[1], PERMISSION_REQ_ID) 
            &&  checkSelfPermission(REQUESTED_PERMISSIONS[2], PERMISSION_REQ_ID ) ) {
        // 获取到权限,开始你的代码
            }
        }


    private boolean checkSelfPermission(String permission, int requestCode) {
        if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, REQUESTED_PERMISSIONS, requestCode);
            return false;
        }

        return true;
    }

    @Override
    public void onRequestPermissionsResult(int requestCode,  @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (requestCode == PERMISSION_REQ_ID) {
        
            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
                if (grantResults[0] != PackageManager.PERMISSION_GRANTED 
                ||   grantResults[1] != PackageManager.PERMISSION_GRANTED
                        ||  grantResults[3] != PackageManager.PERMISSION_GRANTED
                        ||  grantResults[4] != PackageManager.PERMISSION_GRANTED
                        ||  grantResults[5] != PackageManager.PERMISSION_GRANTED ) {
        // 未获取到权限,开始你的代码
                    return;
                }
            } else  {
                if (grantResults[0] != PackageManager.PERMISSION_GRANTED 
                ||   grantResults[1] != PackageManager.PERMISSION_GRANTED 
                ||  grantResults[2] != PackageManager.PERMISSION_GRANTED ) {
        // 未获取到权限,开始你的代码
                    return;
                }
            }

        // 获取到权限,开始你的代码
        }
    }
相关推荐
檀越剑指大厂3 小时前
容器化 Android 开发效率:cpolar 内网穿透服务优化远程协作流程
android
MiyamuraMiyako4 小时前
从 0 到发布:Gradle 插件双平台(MavenCentral + Plugin Portal)发布记录与避坑
android
NRatel4 小时前
Unity 游戏提升 Android TargetVersion 相关记录
android·游戏·unity·提升版本
叽哥7 小时前
Kotlin学习第 1 课:Kotlin 入门准备:搭建学习环境与认知基础
android·java·kotlin
风往哪边走7 小时前
创建自定义语音录制View
android·前端
用户2018792831677 小时前
事件分发之“官僚主义”?或“绕圈”的艺术
android
用户2018792831677 小时前
Android事件分发为何喜欢“兜圈子”?不做个“敞亮人”!
android
Kapaseker9 小时前
你一定会喜欢的 Compose 形变动画
android
QuZhengRong9 小时前
【数据库】Navicat 导入 Excel 数据乱码问题的解决方法
android·数据库·excel
zhangphil10 小时前
Android Coil3视频封面抽取封面帧存Disk缓存,Kotlin(2)
android·kotlin