Android: 存储权限问题(直接进入权限适配页,找不到存储权限开关)

1、遇到的问题?

我在开发过程中遇到,动态申请存储权限,没有申请开启存储权限提示框,直接提示拒绝权限,进入权限设置页面。我采用了网上比较流行的权限申请框架都是如此。我用的权限申请框架是:

 // 权限管理
implementation 'com.github.dfqin:grantor:2.5'
//EasyPermissions权限管理框架
implementation 'pub.devrel:easypermissions:3.0.0'

XML已经加入了:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

注意:在所有权限列表,根本找不到存储权限。

2、解决方式1:
解决:将compileSdkVersion 和targetSdk 版本改成31即可(出问题的版本是33)。
android {
    //namespace 'com.asura.android.tmspda'
    compileSdkVersion 31
    buildToolsVersion "30.0.3"

    defaultConfig {
        applicationId "com.asura.android.tmspda"
        minSdk 21
        targetSdk 31
        versionCode 100
        versionName "1.0.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
        ndk {
            // 设置支持的SO库架构
            abiFilters 'armeabi', 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
        }
    }
  }

3、解决方式2:
注意:Android 13(API 33)读写SD卡权限的调整适配:

在Android13前读取SDcard 的内容只需要一个权限:

android.permission.READ_EXTERNAL_STORAGE

但是在Android 13以后这个权限被细化成了三个:

 public static final String READ_MEDIA_AUDIO = "android.permission.READ_MEDIA_AUDIO";
 public static final String READ_MEDIA_IMAGES = "android.permission.READ_MEDIA_IMAGES";
 public static final String READ_MEDIA_VIDEO = "android.permission.READ_MEDIA_VIDEO";

如果是升级Android13之前就已经具有读写SDK的权限,那么升级到13之后,自己具有上述三个权限。

1、如果是升级Android13之后新装的应用,并且targetSDK小于33,则申请READ_EXTERNAL_STORAGE权限时,会自动转化为对上述三个权限的申请,权限申请框只一个。
2、如果是升级Android13之后新装的应用,并且targetSDK大于等于33,则申请READ_EXTERNAL_STORAGE权限时会自动拒绝(同理WRITE_EXTERNAL_STORAGE也是一样)。必须申请上面三个权限才可以。

使用:

1、xml中添加:

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

2、代码中申请:

 fun requestStorage() {
        //一定要进行版本判断,还是找不到存储权限
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU){
           LogUtils.debugInfo("----大于33的版本-----")
            PermissionsUtil.requestPermission(
                this,
                object : PermissionListener {
                    override fun permissionGranted(permission: Array<out String>) {
                        //升级弹窗
                        // CommonDialogUtil.commonAppUpdate(this@SplashActivity)
                        //进入登录页或者主页面
                        startActivity(Intent(this@SplashActivity, HomeActivity::class.java))
                        finish()
                    }

                    override fun permissionDenied(permission: Array<out String>) {
                        LogUtils.debugInfo("---报错:${permission.toString()}")
                        ToastUtils.showToast(this@SplashActivity, "用户拒绝了存储权限")
                        PermissionsUtil.gotoSetting(this@SplashActivity)
                    }

                },
                Manifest.permission.READ_MEDIA_AUDIO,
                Manifest.permission.READ_MEDIA_IMAGES,
                Manifest.permission.READ_MEDIA_AUDIO,
            )
        }else {
            LogUtils.debugInfo("----小于33的版本-----")
            PermissionsUtil.requestPermission(
                this,
                object : PermissionListener {
                    override fun permissionGranted(permission: Array<out String>) {
                        //获得权限,操作内容....
                    }

                    override fun permissionDenied(permission: Array<out String>) {
                        ToastUtils.showToast(this@SplashActivity, "用户拒绝了存储权限")
                        PermissionsUtil.gotoSetting(this@SplashActivity)
                    }
                },
            Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.READ_EXTERNAL_STORAGE,

            )
        }
    }

最后

如果想要成为架构师或想突破20~30K薪资范畴,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。

如果你没有方向,这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶笔记》,帮大家将杂乱、零散、碎片化的知识进行体系化的整理,让大家系统而高效地掌握Android开发的各个知识点。
img
相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照知识体系编排的。

欢迎大家一键三连支持,若需要文中资料,直接扫描文末CSDN官方认证微信卡片免费领取↓↓↓(文末还有ChatGPT机器人小福利哦,大家千万不要错过)

PS:群里还设有ChatGPT机器人,可以解答大家在工作上或者是技术上的问题
图片

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值