权限不是可更改的权限类型

时间:2016-12-15 23:07:41

标签: java android permissions

后台:我正在尝试新的Tiles和TileService,并决定从CyanogenMod.重新创建USB Tethering磁贴我使用反射来访问连接管理器的方法。

问题:一种此类方法是isTetheringSupported()导致java.lang.SecurityException: You either need MANAGE_USERS or CREATE_USERS permission to: query user

所以我在清单中添加了权限,但每次使用pm grant时都会返回"权限不是可更改的权限类型"

根据this,使用调试密钥签名时不会出现此错误。

问题:如何获得这些权限?

1 个答案:

答案 0 :(得分:1)

<强> 更新: 通过 Xposed ,可以挂钩PackageManger并删除下面的检查,然后pm grant...成功授予任何权限。如果有人看到这个并需要帮助,请在下面发表评论,我会帮助你。

OLD ANSWER 源代码中的此代码

boolean isDevelopment =
            ((bp.protectionLevel&PermissionInfo.PROTECTION_FLAG_DEVELOPMENT) != 0);

不会检查您的应用是否处于开发模式。它会检查您请求的权限是否将protectionLevel属性(在清单中设置)设置为development。 您尝试获得的权限似乎没有在清单中声明可以通过此检查的任何元素:

if (!isNormal && !isDangerous && !isDevelopment) {
        throw new SecurityException("Permission " + bp.name
                + " is not a changeable permission type");
    }

在另一个许可下偶然发现了这一点。似乎没有办法得到它。