[建议]:WRITE_EXTERNAL_STORAGE相关权限处理问题
你觉得框架有什么不足之处?【必答】
在小米k70标准版,android14上,使用本框架,单独申请WRITE_EXTERNAL_STORAGE权限,系统不会弹出权限申请弹窗,符合预期。
单独申请READ_MEDIA_IMAGES权限,系统弹一次是否允许访问【照片和视频】,符合预期。
但当WRITE_EXTERNAL_STORAGE权限与READ_MEDIA_IMAGES权限一起申请时,系统会先后弹两次弹窗,一次问你是否允许访问【照片、视频、音频】,一次问你是否允许访问【照片和视频】,令人困惑。
既然谷歌说了WRITE_EXTERNAL_STORAGE在高版本无用,那还申请它干嘛。框架是否可以自作主张,干脆就不申请了,帮用户做决定,给它过滤掉(在optimizeDeprecatedPermission方法里)。
issue 是否有人曾提过类似的建议?【必答】
否
框架文档是否提及了该问题【必答】
否
是否已经查阅框架文档但还未能解决的【必答】
是
你觉得该怎么去完善会比较好?【非必答】
No response
有些系统会改的,不一定会遵循官方的
这个问题我测试了一下,原生的 Android 系统不会出现这个问题,因为申请 WRITE_EXTERNAL_STORAGE 在 Android 14 系统会被直接拒绝 ,只不过框架内部做了特殊处理,处理成功了,你说的红米 k70 确实会出现,但是这个问题属于 miui 的问题,你需要反馈给小米 miui 官方,而不是交给框架去过滤,要知道这样做是有风险的,多申请一个权限是没有问题的,但是少一个权限就不一样了,你在权限成功的回调做的操作可能会直接出现崩溃,所以框架不可能擅自主张减少你申请的权限。
我建议你反馈给 miui 官方,否则这个问题将永远存在,另外我可以提供一个临时的解决方案给你:你根据不同的 Android 版本申请权限,如果是 Android 14 就申请 READ_MEDIA_IMAGES 权限,否则就申请 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE 权限,如果你这个过程有出现框架内部检查而出现的崩溃记录,可以在链式调用中加上 unchecked() 方法,从而避免触发框架内部检查机制。
有时候不是框架不做这些兼容三方厂商,而是不合理,且前期投入的人力和时间成本巨大,搞不搞定还是另外说,所以厂商搞出来的问题,应该丢给厂商处理,而不是哪方好说话或者方便就找他,要分清事情的本质,是谁的问题就由谁来处理。如果你还是不明白我的意思,可以举浅显的一个例子给你听听,我之前遇到过一台 Android 6.0 的 vivo 或者 oppo 手机,它完全不兼容谷歌在 Android 6.0 危险权限特性,也就是你调用 activity.requestPermissions 方法,系统会告诉你申请成功,但是实际没有申请,更没有申请成功,如果换成你会怎么处理?你在没有系统源码的情况下怎么处理?
@getActivity 可是目前框架已经有减少权限请求的前科了,我认为这个处理没问题,可以继续犯下去,保证逻辑统一。反而你提的另一个方案,让大家改变使用XXPermissions的习惯,在使用XXPermissions前再判断一次系统版本,我觉得不太好,这违背了使用XXPermissions的初衷。
@getActivity 上面的代码中,单独申请WRITE_EXTERNAL_STORAGE,直接提前返回了,跳过了执行launchPermissionRequest,直接回调成功,不也是一种框架擅自主张减少申请?你可以把我这次的建议解释为逻辑统一,而不是给国产手机系统擦屁股。
@suikastar 谷歌在 Android 14 设计 WRITE_EXTERNAL_STORAGE 权限一申请就被系统拒绝,这个设计有种意思是,Android 14 上面没有这个权限,但是厂商又把它加进去,加进去的意义是什么?就算弹窗申请成功了,什么也干不了,这个就是厂商的问题,不应该由框架来兼容。
我更认为这个问题是 miui 工程师开发出来的 bug,你先反馈给他们看看,后续有结果再反馈我跟进,我再想想怎么弄。
@getActivity 好的
@suikastar 小伙子,我在 21.0 版本优化了该问题,具体优化的方法是,已授权的权限不会丢给系统申请,没有授权的权限才会丢给系统申请,你可以升级到新版本再看看。
@getActivity 好的,明天我看看
@getActivity 经过测试对比20.0版本和21.0版本,21.0版本不再有两次弹窗问题,在小米上已经得到优化