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

        // 获取到权限,开始你的代码
        }
    }
相关推荐
你过来啊你12 分钟前
Android性能优化之包体积优化
android
你过来啊你13 分钟前
Android性能优化之UI渲染优化
android
stringwu14 分钟前
Android开发者必备:手势冲突处理实用总结
android
你过来啊你15 分钟前
Android性能优化之内存优化
android
你过来啊你21 分钟前
Android性能优化之启动优化
android
apihz1 小时前
域名WHOIS信息查询免费API使用指南
android·开发语言·数据库·网络协议·tcp/ip
问道飞鱼1 小时前
【移动端知识】移动端多 WebView 互访方案:Android、iOS 与鸿蒙实现
android·ios·harmonyos·多webview互访
aningxiaoxixi2 小时前
Android 之 audiotrack
android
枷锁—sha2 小时前
【DVWA系列】——CSRF——Medium详细教程
android·服务器·前端·web安全·网络安全·csrf
Cao_Shixin攻城狮6 小时前
Flutter运行Android项目时显示java版本不兼容(Unsupported class file major version 65)的处理
android·java·flutter