manifest权限添加无效

在InCallUI中添加了一段代码
private boolean isDreaming(){
boolean isDreaming = false;
        try{
IDreamManager mDreamManager = IDreamManager.Stub.asInterface(
                ServiceManager.getService(DreamService.DREAM_SERVICE));
if(mDreamManager!=null){
            isDreaming = mDreamManager.isDreaming();
        android.util.Log.i("fullincall11","mDreamManager = "+mDreamManager.isDreaming());
        }
        } catch (Exception e) {
android.util.Log.i("fullincall11","e = "+e);
}
return isDreaming;
}


用来判断是否处于屏保状态,程序运行提示需要权限“android.permission.READ_DREAM_STATE”,可是在Manifest中添加之后,依然提示缺少该权限。
 解决办法:
通过在framework/base/core/res/Manifest.xml中找到
    <!-- Allows applications to read dream settings and dream state.
         @hide -->
    <permission android:name="android.permission.READ_DREAM_STATE"
        android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
        android:protectionLevel="signature" />


权限android.permission.READ_DREAM_STATE 的android:protectionLevel="signature",而我们一般直接添加的权限的protectionLevel都是normal。
网上找了一段资料:
在声明权限时需要一个android:protectionLevel的属性,它代表“风险级别”。必须是以下值之一:
normal、dangerous、signature、signatureOrSystem。
normal表示权限是低风险的,不会对系统、用户或其他应用程序造成危害。
dangerous表示权限是高风险的,系统将可能要求用户输入相关信息,才会授予此权限。
signature告诉Android,只有当应用程序所用数字签名与声明此权限的应用程序所有数字签名相同时,才能将权限授给它。
signatureOrSystem告诉Android,将权限授给具有相同数字签名的应用程序或Android包类,这一级别适用于非常特殊的情况,比如多个供应商需要通过系统影像共享功能时。
另外一个是android:permissionGroup属性,表示一个权限组。可以将权限放在一个组中,但对于自定义权限,应该避免设置此属性。如果确实希望设置此属性,可以使用以下属性代替:android.permission-group.SYSTEM_TOOLS。
从资料中分析,应该是签名的问题。最终将Dialer的LOCAL_CERTIFICATE := shared修改为LOCAL_CERTIFICATE := platform解决了问题。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值