在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解决了问题。
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解决了问题。