给应用增加默认的动态申请权限,具体解析流程自己梳理,系统主要是去读取xml文件的权限
第一、在frameworks\base\services\core\java\com\android\server\pm\DefaultPermissionGrantPolicy.java
中的方法
private void grantDefaultSystemHandlerPermissions(int userId)
private void grantDefaultSystemHandlerPermissions(int userId) {
Log.i(TAG, "Granting permissions to default platform handlers for user " + userId);
final PackagesProvider locationPackagesProvider;
......
synchronized (mService.mPackages) {
//就是下面这里增加一个方法
grantStoragePermissionsToCustomApp(userId);
// Installer
PackageParser.Package installerPackage = getSystemPackageLPr(
mService.mRequiredInstallerPackage);
if (installerPackage != null
&& doesPackageSupportRuntimePermissions(installerPackage)) {
grantRuntimePermissionsLPw(installerPackage, STORAGE_PERMISSIONS, true, userId);
}
......
}
private void grantStoragePermissionsToCustomApp(int userId){
final String []itemString = {"com.tencent.qq"};
for (int i = 0; i < itemString.length; i++) {
PackageParser.Package customPackage = getPackageLPr(itemString[i]);
if ((customPackage != null) && doesPackageSupportRuntimePermissions(customPackage)) {
grantRuntimePermissionsLPw(customPackage, MICROPHONE_PERMISSIONS, userId);
grantRuntimePermissionsLPw(customPackage, STORAGE_PERMISSIONS, userId);
grantRuntimePermissionsLPw(customPackage, CONTACTS_PERMISSIONS, userId);
grantRuntimePermissionsLPw(customPackage, LOCATION_PERMISSIONS,true, userId);
grantRuntimePermissionsLPw(customPackage, PHONE_PERMISSIONS, userId);
grantRuntimePermissionsLPw(customPackage, CAMERA_PERMISSIONS, userId);
}
}
}
第二、这里也要加上
frameworks\base\data\etc\privapp-permissions-platform.xml
<privapp-permissions package="com.tencent.qq">
<permission name="android.permission.CAMERA"/>
<permission name="android.permission.READ_CONTACTS"/>
<permission name="android.permission.ACCESS_FINE_LOCATION"/>
<permission name="android.permission.RECORD_AUDIO"/>
<permission name="android.permission.READ_PHONE_STATE"/>
<permission name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<permission name="android.permission.SEND_SMS"/>
</privapp-permissions>