參考:
Android (6.0) M 請求權(quán)限
(5)簡單說下請求權(quán)限的流程
App-->Activity.requestPermissions-->然后startActivityForResult-->然后調(diào)到PackageInstaller里面的GrantPermisslonsActivity,然后show給用戶看,你需要不需要申請權(quán)限。如果同意->就調(diào)用PMS的grantRuntimePermission獲取到權(quán)限并且調(diào)用setResuletAndFinsh函數(shù)CallBack返回給
App--app只要需要在Activity中重寫OnRequestPermissionResult方法。
(2)Activity Intent的內(nèi)容Action就是ACTION.Request_permissionS 數(shù)據(jù)包就是permission.name
6.Apk安裝時會判斷權(quán)限類型,對于dangerous的權(quán)限,會判定為runtimePermission,安裝時不會對User賦予此權(quán)限.
其他類型的權(quán)限,則安裝時賦予給所有的User
grantPermissionsLpw --獲取權(quán)限的接口
-writeRuntimePermissionsForUserLpr 寫入xml
對應的runtime-permissionos.xml 每個user維護一份
com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java
getPackageManager().updatePermissionFlags
com/android/server/pm/PackageManagerService.java
中發(fā)現(xiàn)的另一組調(diào)用鏈
updatePermissionFlags --> mSettings.writeRuntimePermissionsForUserLPr(userId, false)
還有一個類,com/android/server/pm/DefaultPermissionGrantPolicy.java,應該是給系統(tǒng)APP默認授權(quán)的。