只要是设计到默认赋权,就在framework下找这个类:base/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
其中看到下面这个方法,开机的时候就会调用,赋予默认权限的,我们只需在新增一个默认给系统应用赋予所有权限的方法并在这个grantDefaultPermissions方法中调用即可
public void grantDefaultPermissions(int userId) {
DelayingPackageManagerCache pm = new DelayingPackageManagerCache();
grantPermissionsToSysComponentsAndPrivApps(pm, userId);
grantDefaultSystemHandlerPermissions(pm, userId);
grantSignatureAppsNotificationPermissions(pm, userId);
grantDefaultPermissionExceptions(pm, userId);
// Apply delayed state
pm.apply();
}
新增的方法如下:
private void grantAllPermissionsToAllSystemApps(int userId) {
final PackageManager packageManager = mContext.getPackageManager();
final List<PackageInfo> packages = packageManager.getInstalledPackages(
PackageManager.PackageInfoFlags.of(PackageManager.GET_PERMISSIONS));
for (PackageInfo pkg : packages) {
ApplicationInfo appInfo = pkg.applicationInfo;
String packageName = pkg.packageName;
if (!appInfo.isSystemApp()) {
continue;
}
String[] requestedPermissions = pkg.requestedPermissions;
if (requestedPermissions == null) continue;
for (String permission : requestedPermissions) {
try {
android.util.Log.w("mtest","Checking permission: " + permission + " for package: " + packageName);
if (packageManager.checkPermission(permission, packageName) != PackageManager.PERMISSION_GRANTED) {
android.util.Log.w("mtest", "Granting permission: " + permission + " to package: " + packageName);
packageManager.grantRuntimePermission(packageName, permission, UserHandle.of(userId));
}else {
android.util.Log.w("mtest","Permission " + permission + " already granted for package: " + packageName);
}
} catch (Exception e) {
Log.w(TAG, "Could not grant permission " + permission + " to " + packageName, e);
}
}
}
}