Android: 存储权限问题(直接进入权限适配页,找不到存储权限开关) 您所在的位置:网站首页 荣耀手机权限设置中没有存储 Android: 存储权限问题(直接进入权限适配页,找不到存储权限开关)

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

2024-07-11 10:46| 来源: 网络整理| 查看: 265

1、遇到的问题?

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

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

XML已经加入了:

注意:在所有权限列表,根本找不到存储权限。 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中添加:

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) { //升级弹窗 // CommonDialogUtil.commonAppUpdate(this@SplashActivity) //进入登录页或者主页面 startActivity(Intent(this@SplashActivity, HomeActivity::class.java)) finish() } override fun permissionDenied(permission: Array) { 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) { //获得权限,操作内容.... } override fun permissionDenied(permission: Array) { 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机器人,可以解答大家在工作上或者是技术上的问题 图片



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有