android权限申请流程分析

2021-12-29  本文已影响0人  nich

android11代码为例

andorid权限申请一般流程分为:

checkSelfPermission(@NonNull String permission) 检查是否需要权限requestPermissions(@NonNull String[] permissions, int requestCode) 申请权限onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) //权限回调

主要研究checkSelfPermission和requestPermissions方法

checkSelfPermission

调用context.checkSelfPermission接下来看context实现类contextimpl

调用到ams

调用pkms的checkUidPermission

mPermissionManagerService.checkUidPermission(permName, uid);

再进入PermissionManagerService

一顿操作完事后把结果返回回来

总结来说就是checkSelfPermission-》ams—》pkms-〉PermissionManagerService-》完事

requestPermissions

点击进去看到的是调用framework/base/core/java/android/app/activity里面的

隐式调用

接下来通过action_request_permissions搜索到package/apps/permissioncontroll里面有这个东西,这个下面是android手机一些系统自带的apk可以看到androidmanifest里面

接下来看activity(其实就是申请权限的时候弹出的那个弹框界面)

这里主要分析应许的时候

groupState.mGroup.grantRuntimePermissions(true, doNotAskAgain,groupState.affectedPermissions);授予权限

reportRequestResult()更新授权结果

主要看授权代码在AppPermissionGroup.java里面

看grantRuntimePermissions里面的这个方法,persistchanges

调用pkms的grantRuntimePermission方法就是packagemanageservice方法

然后进入grantruntimepermission

看这个callback的onPermissionGranted

他又跑到pkms里了

创建xml文件用于记录权限状态

requestPermissions总结:requestPermissions ->GrantPermissionsActivity->pkms->PermissionManagerService—>PKMS中的onPermissionGranted->记录在setting里面

上一篇下一篇

猜你喜欢

热点阅读