只要是设计到默认赋权,就在framework下找这个类:base/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
安卓系统开机的时候会调用这个类里面的下面这个方法:
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();
}
grantDefaultSystemHandlerPermissions方法里面会默认赋予浏览器权限
private void grantDefaultSystemHandlerPermissions(PackageManagerWrapper pm, int userId) {
......
// Browser
String browserPackage = ArrayUtils.firstOrNull(getKnownPackages(
KnownPackages.PACKAGE_BROWSER, userId));
if (browserPackage == null) {
browserPackage = getDefaultSystemHandlerActivityPackageForCategory(pm,
Intent.CATEGORY_APP_BROWSER, userId);
if (!pm.isSystemPackage(browserPackage)) {
browserPackage = null;
}
}
grantPermissionsToPackage(pm, browserPackage, userId, false /* ignoreSystemPackage */,
true /*whitelistRestrictedPermissions*/, FOREGROUND_LOCATION_PERMISSIONS);
}
代码中通过"Intent.CATEGORY_APP_BROWSER"这个标识去判断是否是浏览器应用,如果是浏览器应用将会通过grantPermissionsToPackage方法去赋予浏览器权限
@SafeVarargs
private final void grantPermissionsToPackage(PackageManagerWrapper pm, String packageName,
int userId, boolean ignoreSystemPackage, boolean whitelistRestrictedPermissions,
Set<String>... permissionGroups) {
grantPermissionsToPackage(pm, pm.getPackageInfo(packageName),
userId, false /* systemFixed */, ignoreSystemPackage,
whitelistRestrictedPermissions, permissionGroups);
}
通过代码可以看到permissionGroups是一个可变参数,如果想给浏览器添加更多的默认参数只要在后面添加相应的权限即可,如下:
grantPermissionsToPackage(pm, browserPackage, userId, false /* ignoreSystemPackage */,
true /*whitelistRestrictedPermissions*/, FOREGROUND_LOCATION_PERMISSIONS,NOTIFICATION_PERMISSIONS,STORAGE_PERMISSIONS,CAMERA_PERMISSIONS,MICROPHONE_PERMISSIONS);