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里面

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容