android权限申请流程分析
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里面