getActivity / XXPermissions

Android 权限请求框架,已适配 Android 14
Apache License 2.0
5.44k stars 735 forks source link

[Bug]:权限设置maxSdkVersion后一律抛出异常 #280

Open gggcccwww opened 1 month ago

gggcccwww commented 1 month ago

框架版本【必填】

v18.63

问题描述【必填】

![Uploading image.png…]() 此处传入值永远是Integer.MAX_VALUE,一旦设置android:maxSdkVersion 必定抛出异常

复现步骤【必填】

android 9手机上运行app,清单文件添加<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28" /> 后申请WRITE_EXTERNAL_STORAGE 后直接报出please delete the android:maxSdkVersion异常

image

此处方法传入的是Integer.MAX_VALUE 永远报错!

是否必现【必填】

项目 targetSdkVersion【必填】

33

出现问题的手机信息【必填】

android 9即可

出现问题的安卓版本【必填】

android 9即可

问题信息的来源渠道【必填】

自己遇到的

是部分机型还是所有机型都会出现【必答】

必现

框架最新的版本是否存在这个问题【必答】

框架文档是否提及了该问题【必答】

是否已经查阅框架文档但还未能解决的【必答】

issue 列表中是否有人曾提过类似的问题【必答】

是否已经搜索过了 issue 列表但还未能解决的【必答】

是否可以通过 Demo 来复现该问题【必答】

提供报错堆栈

java.lang.IllegalArgumentException: The AndroidManifest.xml file <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28" /> does not meet the requirements, please delete the android:maxSdkVersion="28" attribute
        at com.hjq.permissions.PermissionChecker.checkManifestPermission(PermissionChecker.java:665)
        at com.hjq.permissions.PermissionChecker.checkManifestPermission(PermissionChecker.java:627)
        at com.hjq.permissions.PermissionChecker.checkManifestPermissions(PermissionChecker.java:542)
        at com.hjq.permissions.XXPermissions.request(XXPermissions.java:200)
        at

提供截图或视频

No response

提供解决方案

No response

getActivity commented 1 month ago

小伙子,你为什么要给权限加 maxSdkVersion 属性?

gggcccwww commented 1 month ago

存储一张图片到相册28 以前需要WRITE_EXTERNAL_STORAGE权限才可以,28以后压根就不需文件权限 所以自然的 这个权限WRITE_EXTERNAL_STORAGE 我得加个maxSdkVersion 属性哇。。。。大佬哇,这个参数就是设置不同权限的上限版本的哇

getActivity commented 1 month ago

@gggcccwww 不加会有什么问题?

lisonge commented 3 weeks ago

仅供参考的 AI 回复

image

getActivity commented 3 weeks ago

存储一张图片到相册28 以前需要WRITE_EXTERNAL_STORAGE权限才可以,28以后压根就不需文件权限 所以自然的 这个权限WRITE_EXTERNAL_STORAGE 我得加个maxSdkVersion 属性哇。。。。大佬哇,这个参数就是设置不同权限的上限版本的哇

小伙子,我认真思考了一下,你讲得确实有道理,但是 API 28 还不一定不需要权限,得看你怎么读写外部存储上面的文件,如果你是通过 ContentValues 的方式,确实不需要权限,但是如果是通过 File 的方式,则仍然需要写入文件权限,框架其实无法得知外层用的是哪种。

getActivity commented 3 weeks ago

如果要解决你这个问题,其实有两个办法,你可以参考一下

  1. 在清单文件中静态注册权限的时候,不要带上 maxSdkVersion 属性,这样就不会触发框架的检测异常

  2. 在权限申请的时候,调用 .unchecked() 方法,表示不会进行任何权限检查,这样就不会触发框架的检测异常