权限保护级别错误?

施克奈德

我正在尝试将我的代码改编为Android Marshmallow。

我编写了一个函数来检查权限是否可撤消(PROTECTION_NORMALPROTECTION_SIGNATURE在安装时授予)。

在API-22上运行,Manifest.permission.READ_PHONE_STATE返回值protectionLevel=PermissionInfo.PROTECTION_DANGEROUS,这是我所期望的

但是在API-22上Manifest.permission.INSTALL_SHORTCUT也会返回protectionLevel=PermissionInfo.PROTECTION_DANGEROUS,这从文档中是错误的

这是怎么发生的?我的代码有什么问题:

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

如果您使用的是问题中显示的代码,则不会。充其量,您的代码将指示protectionLevelisnormalsignatureand并没有设置其他位。

这是怎么发生的?

protectionLevel是一个位掩码。您没有正确比较位掩码。

int coreBits=info.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE;

coreBits将是核心PROTECTION_价值之一。protectionLevel可能没有,因为可能设置了高阶位(例如PROTECTION_FLAG_PRE23)。并且,在Android 6.0上,该coreBits报告INSTALL_SHORTCUTnormal许可。

有关使用的演示,请参见此示例项目PermissionInfo.PROTECTION_MASK_BASE

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Android更改默认权限保护级别

Android权限保护级别18和50

“正常级别保护”权限的目的是什么?

字典中的保护级别错误

错误SQL级别1权限不足oracle

错误:由于其保护级别而无法访问

扩展受保护的类变量并将其标记为私有后,为什么会得到“必须保护或保护访问级别的权限”?

错误:由于保护级别为C#,因此无法访问Car.Form1。

为什么我仍然收到“由于其保护级别而无法访问”错误?

为什么由于保护级别而无法访问错误“ ObjectPoolingManager.Instance”?

LINQPad错误:由于其保护级别,无法访问上下文

由于其保护级别,无法访问列表框Windows Phone 8.1中存在错误

字段级别权限Django

解压缩受密码保护的文件时出现权限错误

Amazon EC2 错误“警告:未受保护的私钥文件!” 即使更改了 Microsoft WSL 的权限

我的 Elementor 网站面临致命错误致命错误:必须保护对 Molla_Element_Section::get_html_tag() 的访问级别

Django-权限级别在视图级别

框架中的单例错误:由于“私有”保护级别,无法访问初始化程序

x:事件绑定的绑定语法给出错误CS0122:由于保护级别而无法访问

Django DRF角色级别权限

检查 .exe 文件的权限级别

M个新的保护级别列表?

WCF为绑定设置保护级别?

Swift中受保护的访问级别

预装和特权保护级别之间的区别

查找类成员 C++ 的保护级别

由于保护级别而无法访问

修饰符“受保护的”访问级别

gson混淆保护错误