getActivity / XXPermissions

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

[Bug]:android.content.pm.action.REQUEST_PERMISSIONS 出现空指针 #236

Closed lixiang0418 closed 8 months ago

lixiang0418 commented 8 months ago

框架版本【必填】

16.6

问题描述【必填】

Bugly上报异常 1 java.lang.RuntimeException:Failure delivering result ResultInfo{who=@android:requestPermissions:android:fragment:1, request=110, result=0, data=Intent { act=android.content.pm.action.REQUEST_PERMISSIONS (has extras) }} to activity {com.faloo.BookReader4Android/com.faloo.view.activity.SplashActivity}: java.lang.NullPointerException: Attempt to get length of null array 1 java.lang.RuntimeException:Failure delivering result ResultInfo{who=@android:requestPermissions:android:fragment:1, request=110, result=0, data=Intent { act=android.content.pm.action.REQUEST_PERMISSIONS (has extras) }} to activity {com.faloo.BookReader4Android/com.faloo.view.activity.SplashActivity}: java.lang.NullPointerException: Attempt to get length of null array 2 android.app.ActivityThread.deliverResults(ActivityThread.java:4426) 3 ...... 4 Caused by: 5 java.lang.NullPointerException:Attempt to get length of null array 6 com.hjq.permissions.PermissionFragment.onRequestPermissionsResult(Proguard:360) 7 android.app.Activity.dispatchRequestPermissionsResultToFragment(Activity.java:7630) 8 android.app.Activity.dispatchActivityResult(Activity.java:7474) 9 android.app.ActivityThread.deliverResults(ActivityThread.java:4419) 10 android.app.ActivityThread.handleSendResult(ActivityThread.java:4468) 11 android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49) 12 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 13 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 14 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1813) 15 android.os.Handler.dispatchMessage(Handler.java:106) 16 android.os.Looper.loop(Looper.java:193) 17 android.app.ActivityThread.main(ActivityThread.java:6820) 18 java.lang.reflect.Method.invoke(Native Method) 19 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 20 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:861)

复现步骤【必填】

使用云真机,没有找到 联想 Z5 Pro设备, 使用 联想Z6 型号,Android 9 进行测试未复现 使用 拯救者Y90 型号,Android 12进行测试未复现 使用 联想 ZUK edge 型号,Android 7进行测试未复现

一加 6,vivo Z3,索尼 XZ2,ROG 游戏手机2 均是Android 9,进行测试,未复现

是否必现【必填】

未选择

项目 targetSdkVersion【必填】

26

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

联想 Z5 Pro

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

Android 9,level 28

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

Bugly 看到的

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

部分

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

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

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

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

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

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

提供报错堆栈

No response

提供截图或视频

No response

提供解决方案

16.6和18.3 PermissionFragment 的 onRequestPermissionsResult方法,只判断了permissions.length == 0,是不是可以增加 ==null 的判断呢 源代码:

        if (permissions.length == 0 || grantResults.length == 0) {
            return;
        }

期望代码:

        if (permissions == null || permissions.length == 0 || grantResults.length == 0) {
            return;
        }
lixiang0418 commented 8 months ago

翻和轮子哥的聊天记录发现,以前反馈过vivo的出现过类似的权限问题,也是这个权限,不过异常是 ActivityNotFoundException ![Uploadingbuglyimage.png…]()

getActivity commented 8 months ago

小伙子,正常情况下是肯定不会出现空的情况,因为在 Android 源码中已经标注 permissions 参数是非空的,还有一种特殊情况是厂商修改了这块的实现,返回了空数组导致的,不过小伙子你既然提了这个问题,就证明这个问题是存在的,我在下个版本加上这个防空判断。

image