[Blankj/AndroidUtilCode]权限请求无效

2024-07-15 858 views
4
权限请求无效

我升级到新版1.29.0版本之后,在权限请求的回调rationale中做了一个本地Dialog弹窗, 在用户点击“确定”按钮的时候调用了shouldRequest.again(true),之后系统并不会弹出授权弹框。单步调试时也你的API确实调用了activity.requestPermissions(sInstance.mPermissionsRequest.toArray(new String[size]), 1),但就是没有授权弹框。后面使用1.28.6版本,发现还是一样。最终我回退到了原来使用的版本1.26.0。

  • AndroidUtilCode 的版本:utilcodex:1.29.0 或者 utilcodex:1.28.6
  • 出现 Bug 的设备型号:本地所有测试机

回答

2

我也遇到了,不过在rationale中 activity参数调用了的话就会正常弹出,很奇怪

0

我测试的时候,如果在rationale使用activity来弹出Dialog的话这个Dialog不会显示,因为是在生产环境中,没有太关注这个问题产生的原因,直接退回来老版本。

0

我 demo 有问题吗

3

刚刚运行了一下你的demo,是可以的,但是我这边就是调起权限请求弹窗,也没有任何错误日志。我调试的时候下面的代码确实执行了

private void requestPermissions(Activity activity) {
            if (sInstance.mPermissionsRequest != null) {
                int size = sInstance.mPermissionsRequest.size();
                if (size <= 0) {
                    activity.finish();
                    return;
                }
                activity.requestPermissions(sInstance.mPermissionsRequest.toArray(new String[size]), 1);
            }
        }
9

问题已经找到了。说一下产生问题的原因,其他老铁些如果遇到了可以快速处理。

rationale回调中如果要做弹窗需要使用回调参数的activity作为Context对象来创建Dialog。我就是从老版本直接升级到新版本就忽略了这个处理,因为老版本的回调没有把这个透明的Activity回调回来,使用的是调用界面的Context对象,所以造成系统不弹出授权窗口。 另外,如果APP内使用了多个自定义Theme并且Dialog中使用了attr参数,比如适配黑暗模式等,需要在PermissionUtils.theme(...)的回调中调用activity.setTheme(...)设置为你定义的并且是透明的Theme。

以上就是我从老版本API升级到新版API处理适配的问题。