[Bug]:拒绝权限后,再申请权限,launchPermissionRequest 这里还是会走
框架版本【必填】
22.0
问题描述【必填】
拒绝权限后,再申请权限,launchPermissionRequest 这里还是会走,导致我这个权限提示的弹框会闪一下再消失
复现步骤【必填】
申请一个权限,彻底拒绝后,再继续申请
是否必现【必填】
是
项目 targetSdkVersion【必填】
35
出现问题的手机信息【必填】
小米
出现问题的安卓版本【必填】
15
问题信息的来源渠道【必填】
自己遇到的
是部分机型还是所有机型都会出现【必答】
目前手头只有小米测试机,其他手机没测
框架最新的版本是否存在这个问题【必答】
是
框架文档是否提及了该问题【必答】
否
是否已经查阅框架文档但还未能解决的【必答】
是
issue 列表中是否有人曾提过类似的问题【必答】
否
是否已经搜索过了 issue 列表但还未能解决的【必答】
是
是否可以通过 Demo 来复现该问题【必答】
是
提供报错堆栈
fun requestCache(
activity: FragmentActivity,
permission: String,
callback: PermissionCallback? = null
) {
mCallback = callback
mActivity = activity
// 判断权限是否处于不再询问状态
if (!XXPermissions.isGrantedPermissions(mActivity, permission)) {
XXPermissions.with(activity)
// 申请单个权限
.permission(permission)
// 设置权限请求拦截器(局部设置)
//.interceptor(PermissionInterceptor())
// 设置不触发错误检测机制(局部设置)
//.unchecked()
.interceptor(object : OnPermissionInterceptor {
override fun launchPermissionRequest(
activity: Activity,
fragmentFactory: PermissionFragmentFactory<*, *>,
requestPermissions: List<String?>,
callback: OnPermissionCallback?
) {
super.launchPermissionRequest(
activity,
fragmentFactory,
requestPermissions,
callback
)
val title = mActivity.getString(R.string.permission_storage_title)
val explain = mActivity.getString(R.string.permission_storage_content)
PermissionPopUtil.show(mActivity, title, explain)
}
})
.request(object : OnPermissionCallback {
override fun onGranted(permissions: MutableList<String>, allGranted: Boolean) {
mCallback?.onSuccess()
PermissionPopUtil.hide()
/*toast("获取录音和日历权限成功")*/
}
override fun onDenied(
permissions: MutableList<String>,
doNotAskAgain: Boolean
) {
PermissionPopUtil.hide()
mCallback?.onFail(doNotAskAgain)
toast(R.string.permission_open_toast)
}
})
} else {
//Toast.makeText(this, "权限已被授予!", Toast.LENGTH_SHORT).show();
mCallback?.onSuccess()
}
}
里面这个PermissionPopUtil就是我的弹框组件
提供截图或视频
No response
提供解决方案
No response
看了一下框架的 Demo 工程也有这个问题,目前我针对这个问题进行了优化,你下载上面的 aar 包看看有无解决?解决了的话请告知我一声,我发布一下远程依赖。
@getActivity 没解决
@xuexirong 你试一下 Demo 工程是否有这个问题?
https://github.com/user-attachments/assets/87cd309a-a5fc-415c-bd74-f778fcd75e19 @getActivity
@xuexirong 你重新拉一下代码,再跑一下 Demo 工程
@getActivity 拉了,还是有问题
你在拦截器中是不能直接显示 PopupWindow 的,而是要延迟一段时间再判断要不要显示,Demo 上面有这块的示例,这个你知道吗?
@getActivity 把你的demo改成了延迟1000可以了,看来就是300毫秒在某些手机或者某些时候不够用
@getActivity 把你的demo改成了延迟1000可以了,看来就是300毫秒在某些手机或者某些时候不够用
怎么可能需要 1000 毫秒?我在最新版本框架上面不是优化了这个时长?怎么还需要那么久?我自己在小米 12 Android 12 上面测试,300 毫秒足够应对的。
@getActivity 我只设置了1000,明天再试试其他值,我用的是小米12s pro,安卓15,澎湃os2.0.8.0,我真的拉的最新代码,因为本地之前没有你的项目,项目刚启动下载东西还跑了挺长时间呢
@getActivity 试了,我的手机350ms可以,300ms不行
@xuexirong 小伙子,有一个不幸的消息,框架 22.0 和 22.2 版本存在严重的 Bug(我在 2025 年 5 月 30 日晚上在 jitpack 手动删除了这两个版本的远程依赖),在 Android 6.0 的设备判断存储相关的权限会出现崩溃,目前我已经在修复了该问题,并且对所有的 Android 版本进行了覆盖测试,请你尽快更新到 23.0 版本。
加延时有个极端场景会有问题,如果用户点同意太快,popwindow还没展示权限就申请完了,审核会认为没有弹说明弹窗。被华为打回来一次,看了录屏才知道审核操作太快了
加延时有个极端场景会有问题,如果用户点同意太快,popwindow还没展示权限就申请完了,审核会认为没有弹说明弹窗。被华为打回来一次,看了录屏才知道审核操作太快了
这个问题应该是华为的问题吧?300 毫秒等于 0.3 秒,如果能够在这个时间内点击,则证明这个操作肯定不是手点的,但是这样是不对的,权限解释弹窗应当延迟显示,否则会导致有些权限申请系统会立马同意,但是权限解释弹窗会一闪而过的效果。
加延时有个极端场景会有问题,如果用户点同意太快,popwindow还没展示权限就申请完了,审核会认为没有弹说明弹窗。被华为打回来一次,看了录屏才知道审核操作太快了
这个问题应该是华为的问题吧?300 毫秒等于 0.3 秒,如果能够在这个时间内点击,则证明这个操作肯定不是手点的,但是这样是不对的,权限解释弹窗应当延迟显示,否则会导致有些权限申请系统会立马同意,但是权限解释弹窗会一闪而过的效果。
例如申请权限组,如果你之前同意了读取外部存储权限的情况下,但是这次你申请了外部存储读写两个权限,框架在判断的时候,读的权限已经授予,但是写的权限还没有授予,此时就会发起权限申请,但是这个时候系统并不会弹出系统授权弹窗,而是直接同意授予权限,这个时候就会出现刚刚说的权限解释弹窗出现一闪而过的问题。
加延时有个极端场景会有问题,如果用户点同意太快,popwindow还没展示权限就申请完了,审核会认为没有弹说明弹窗。被华为打回来一次,看了录屏才知道审核操作太快了
这个问题应该是华为的问题吧?300 毫秒等于 0.3 秒,如果能够在这个时间内点击,则证明这个操作肯定不是手点的,但是这样是不对的,权限解释弹窗应当延迟显示,否则会导致有些权限申请系统会立马同意,但是权限解释弹窗会一闪而过的效果。
是华为的问题,但是咱又不能跟华为去理论,只能应用侧调下延迟
加延时有个极端场景会有问题,如果用户点同意太快,popwindow还没展示权限就申请完了,审核会认为没有弹说明弹窗。被华为打回来一次,看了录屏才知道审核操作太快了
这个问题应该是华为的问题吧?300 毫秒等于 0.3 秒,如果能够在这个时间内点击,则证明这个操作肯定不是手点的,但是这样是不对的,权限解释弹窗应当延迟显示,否则会导致有些权限申请系统会立马同意,但是权限解释弹窗会一闪而过的效果。
是华为的问题,但是咱又不能跟华为去理论,只能应用侧调下延迟
@charmeleon2 你不要管华为有没有认同你的看法,先反馈上去再说,你有反馈这个问题才有可能改,你没有反馈基本不太可能会改。