赞
踩
PackageManagerService
作为android的主要系统服务之一,包含处理应用权限相关的职责。源码地址如下:
frameworks/base/services/core/java/com/android/server/pm
在PMS成功启动时并收到回掉systemReady
回进行应用权限授予。
@Override
public void systemReady() {
...
// If we upgraded grant all default permissions before kicking off.
for (int userId : grantPermissionsUserIds) {
mDefaultPermissionPolicy.grantDefaultPermissions(userId);
}
...
}
DefaultPermissionGrantPolicy
为权限处理策略管理类。
源码地址
services/core/java/com/android/server/pm/permissions/DefaultPermissionGrantPolicy.java
grantDefaultPermissions
方法进行根据应用属性和白名单进行权限授予。
public void grantDefaultPermissions(int userId) {
grantPermissionsToSysComponentsAndPrivApps(userId);
grantDefaultSystemHandlerPermissions(userId);
grantDefaultPermissionExceptions(userId);
}
这里并没有赋予所有系统应用权限,所以当进行应用时还是会显示权限检查的弹框。
DefaultPermissionGrantPolicy
中有个请求全部应用权限的私有方法grantAllRuntimePermissions
private void grantAllRuntimePermissions(int userId) {
Log.i(TAG, "Granting all runtime permissions for user " + userId);
final PackageList packageList = mServiceInternal.getPackageList();
for (String packageName : packageList.getPackageNames()) {
final PackageParser.Package pkg = mServiceInternal.getPackage(packageName);
if (pkg == null) {
continue;
}
grantRuntimePermissionsForPackage(userId, pkg);
}
}
可通过此方法进行所有应用权限赋予:
public void grantDefaultPermissions(int userId) {
if (inited) {
grantAllRuntimePermissions(userId);
} else {
grantPermissionsToSysComponentsAndPrivApps(userId);
grantDefaultSystemHandlerPermissions(userId);
grantDefaultPermissionExceptions(userId);
}
}
如果不想所有应用都授予权限,可考虑在system/etc下的权限相关xml文件添加应用包名和所需权限。
android的特殊权限区别于运行时权限,无法通过弹框请求授予。例如SYSTEM_ALERT_WINDOW
系统弹框权限(显示在其他应用上层),MANAGE_MEDIA_PROJECTION
(录屏)等权限,需要进入对应设置届满授予权限。这些特殊权限分配“appop
”保护级别,需要在AppOpsService
管理,可通过AppOpsManager
进行动态授权。
参考如下方式:
AppOpsManager appOpsManager = ((AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE))
appOpsManager.setMode(AppOpsManager.OP_SYSTEM_ALERT_WINDOW,
applicationInfo.uid,
packageName,
AppOpsManager.MODE_ALLOWED);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。