美文网首页
Android: 存储权限问题(直接进入权限适配页,找不到存储权

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

作者: 因为我的心 | 来源:发表于2024-01-23 15:59 被阅读0次

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"/>
93e48215435d1182372fbaff4d6f9fc.png 允许权限.png 所有权限.png

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

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'
        }
    }
  }
解决了.png

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,

            )
        }
    }

相关文章

网友评论

      本文标题:Android: 存储权限问题(直接进入权限适配页,找不到存储权

      本文链接:https://www.haomeiwen.com/subject/fszuodtx.html