PackageManager.java持有PERMISSION_GRANTED和PERMISSION_DENIED
ContextImpl.java
//权限检查
@Override
public int checkSelfPermission(String permission) {
if (permission == null) {
throw new IllegalArgumentException("permission is null");
}
//是否在放弃申请的权限列表中,是则返回拒绝状态
if (mParams.isRenouncedPermission(permission)) {
Log.v(TAG, "Treating renounced permission " + permission + " as denied");
return PERMISSION_DENIED;
}
return checkPermission(permission, Process.myPid(), Process.myUid());
}
// 最后执行checkPermission方法
@Override
public int checkPermission(String permission, int pid, int uid) {
if (permission == null) {
throw new IllegalArgumentException("permission is null");
}
if (mParams.isRenouncedPermission(permission)
&& pid == android.os.Process.myPid() && uid == android.os.Process.myUid()) {
Log.v(TAG, "Treating renounced permission " + permission + " as denied");
return PERMISSION_DENIED;
}
return PermissionManager.checkPermission(permission, pid, uid);
}
PermissionManager.java
1、安装,卸载应用
2、查询permission相关信息
3、查询Application相关信息(application,activity,receiver,service,provider及相应属性等)
4、查询已安装应用
5、增加,删除permission
6、清除用户数据、缓存,代码段等
/** @hide */
//缓存
private static final PropertyInvalidatedCache<PermissionQuery, Integer> sPermissionCache =
new PropertyInvalidatedCache<PermissionQuery, Integer>(
2048, CACHE_KEY_PACKAGE_INFO, "checkPermission") {
@Override
protected Integer recompute(PermissionQuery query) {
return checkPermissionUncached(query.permission, query.pid, query.uid);
}
};
//方法执行
public static int checkPermission(@Nullable String permission, int pid, int uid) {
return sPermissionCache.query(new PermissionQuery(permission, pid, uid));
}