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

        // 获取到权限,开始你的代码
        }
    }
相关推荐
my_power5201 小时前
车载安卓面试题汇总
android
csj501 小时前
安卓基础之《(15)—内容提供者(1)在应用之间共享数据》
android
yeziyfx2 小时前
kotlin中 ?:的用法
android·开发语言·kotlin
2501_915918413 小时前
只有 Flutter IPA 文件,通过多工具组合完成有效混淆与保护
android·flutter·ios·小程序·uni-app·iphone·webview
robotx3 小时前
AOSP 设置-提示音和振动 添加一个带有开关(Switch)的设置项
android
青莲8434 小时前
RecyclerView 完全指南
android·前端·面试
青莲8434 小时前
Android WebView 混合开发完整指南
android·前端·面试
龙之叶4 小时前
【Android Monkey源码解析三】- 运行解析
android
KevinWang_5 小时前
Android 的 assets 资源和 raw 资源有什么区别?
android
码农幻想梦6 小时前
2021Android从零入门到实战(慕课网官方账号)
android