我正在尝试修改我的android棉花糖代码。
我编写了一个函数来检查权限是否可撤销(PROTECTION_NORMAL
和PROTECTION_SIGNATURE
在安装时被授予)。
在api-22上运行,Manifest.permission.READ_PHONE_STATE
返回protectionLevel=PermissionInfo.PROTECTION_DANGEROUS
,它is what I expected。
但在api-22上,Manifest.permission.INSTALL_SHORTCUT
也返回protectionLevel=PermissionInfo.PROTECTION_DANGEROUS
,这is wrong from the documentation。
怎么会这样?
我的代码有什么问题:
final PermissionInfo permissionInfo = packageManager.getPermissionInfo(permission, 0);
switch (permissionInfo.protectionLevel) {
case PermissionInfo.PROTECTION_NORMAL:
case PermissionInfo.PROTECTION_SIGNATURE:
return false;
default:
return true;
}
最佳答案
manifest.permission.install_shortcut还返回protectionlevel=permissioninfo.protection_dangerous
如果你使用的是你在问题中显示的代码,就不会。充其量,您的代码指示protectionLevel
是normal
还是signature
并且没有设置其他位。
怎么会这样?protectionLevel
是位掩码。您没有正确比较位掩码。
int coreBits=info.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE;
coreBits
将是核心值之一。PROTECTION_
可能不存在,因为可能设置了高阶位(例如,protectionLevel
)。而且,在android 6.0上,PROTECTION_FLAG_PRE23
报告coreBits
是一个INSTALL_SHORTCUT
权限。有关使用
normal
的演示,请参见this sample project。