Android授权app源码函数微解读二
(5)简单说下请求权限的流程
App-->Activity.requestPermissions-->然后startActivityForResult-->然后调到PackageInstaller里面的GrantPermisslonsActivity,然后show给用户看,你需要不需要申请权限。如果同意->就调用PMS的grantRuntimePermission获取到权限并且调用setResuletAndFinsh函数CallBack返回给
App--app只要需要在Activity中重写OnRequestPermissionResult方法。
(2)Activity Intent的内容Action就是ACTION.Request_permissionS 数据包就是permission.name
6.Apk安装时会判断权限类型,对于dangerous的权限,会判定为runtimePermission,安装时不会对User赋予此权限.
其他类型的权限,则安装时赋予给所有的User
grantPermissionsLpw --获取权限的接口
-writeRuntimePermissionsForUserLpr 写入xml
对应的runtime-permissionos.xml 每个user维护一份
com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java
getPackageManager().updatePermissionFlags
com/android/server/pm/PackageManagerService.java
中发现的另一组调用链
updatePermissionFlags --> mSettings.writeRuntimePermissionsForUserLPr(userId, false)
还有一个类,com/android/server/pm/DefaultPermissionGrantPolicy.java,应该是给系统APP默认授权的。