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;
                }
            }

        // 获取到权限,开始你的代码
        }
    }
相关推荐
顾林海1 小时前
深度解析LinkedHashMap工作原理
android·java·面试
JasonYin1 小时前
Git提交前缀
android
louisgeek2 小时前
Android 类加载机制
android
碎风,蹙颦2 小时前
Android开发过程中遇到的SELINUX权限问题
android·人工智能
HZW89702 小时前
鸿蒙应用开发—数据持久化之SQLite
android·前端·harmonyos
百锦再2 小时前
Android Studio 日志系统详解
android·java·ide·app·android studio·安卓·idea
fatiaozhang95273 小时前
晶晨线刷工具下载及易错点说明:Key文件配置错误/mac剩余数为0解决方法
android·电视盒子·魔百盒刷机
QING6186 小时前
详解:Kotlin 类的继承与方法重载
android·kotlin·app
QING6186 小时前
Kotlin 伴生对象(Companion Object)详解 —— 使用指南
android·kotlin·app
一一Null6 小时前
Android studio 动态布局
android·java·android studio