getActivity / XXPermissions

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

[疑惑]:为什么不用 Android 版本判断,而是用 targetSdk 版本判断 #242

Closed jhui20130703 closed 6 months ago

jhui20130703 commented 7 months ago

问题描述【必填】

image

使用XXPermissions 18.3版本,我看框架里面判断的是targetSdk 版本大于等于ANDROID_13去检查新的图片、音频、视频权限,此处是否应该是根据当前手机的Android 版本来判断呢?

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

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

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

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

getActivity commented 7 months ago

小伙子,你是否熟悉 targetSdkVersion 的含义?

Crisy1084 commented 7 months ago

如果应用target升级到33了,但是又需要兼容低版本的时候(低版本android的存量还有不少),这里就没办法绕过去了。

JohnWa97 commented 7 months ago

项目target升级到了33 但是运行在低于33的手机设备时也要强制使用 33的权限才行?是否可以优化这个 不然只能弃用了;正常来说权限版本判断是根据当前手机设备SDK_INT来判断 而不是依据项目的target来判断 希望优化 谢谢!

getActivity commented 7 months ago

@Crisy1084 @JohnWa97 小伙子,targetSdk 是项目在清单文件中注册的,是固定不变的值,当你升级了 targetSdk 为 33 的时候,那么代表你不能用旧的权限进行权限申请,而是应该用新的权限来进行权限申请,否则在高版本的设备会有问题,像截图中的 READ_EXTERNAL_STORAGE 权限,你将不能在 Android 13 上面申请该权限,而是应该申请 READ_MEDIA_IMAGESREAD_MEDIA_VIDEOREAD_MEDIA_AUDIO 任一权限,如果你仍然选择申请 READ_EXTERNAL_STORAGE 权限,权限申请会被系统无情拒绝,并且还是不会弹窗询问用户的那种。

另外对于新权限在旧系统上面的兼容,框架已经做好了处理,你只需要申请新权限即可,框架会自动判断,如果是在旧系统上面运行,则框架会自动添加旧权限进行权限申请,不需要你在外层做任何处理。

另外你如果不想升级 targetSdk 版本,请不要使用新权限来申请权限,直接用旧权限来申请权限即可。

Carlos2927 commented 7 months ago

@getActivity 轮子哥 有个问题啊 这三个android 13的新权限框架在更低版本系统上请求权限时权限请求列表里为什么不删除掉新权限呢 image

getActivity commented 7 months ago

@Carlos2927 框架如果删掉,后续系统通过权限回调给我的时候也没有这个权限,框架回调外层的时候也是没有这个权限,这样就会导致成一个很奇怪的现象,你就申请了 A 权限,但是权限回调给的权限集合中只有 B 权限,没有 A 权限。