亲,你们是否用过华为或者小米的手机。
xxx软件要读取联系人,允许或者取消。这个就是安全受控机制。对于入网认证来说这个是一个必不可少的项目,而且受控的项目非常之多,比如联系人,短信,调用摄像头等等等。
那么这些问题实际上Google是有增加该功能的,只是一直都没有开放出来。不知道为什么。比如如下代码。
/**
* Enable or disable Wi-Fi.
* @param enabled {@code true} to enable, {@code false} to disable.
* @return {@code true} if the operation succeeds (or if the existing state
* is the same as the requested state).
*/
public boolean setWifiEnabled(boolean enabled) {
if (mAppOps.noteOp(AppOpsManager.OP_WIFI_CHANGE) !=
AppOpsManager.MODE_ALLOWED)//进行一个简单的判断是否有权限修改否则返回false
return false;
try {
return mService.setWifiEnabled(enabled);//传入wifiserver进行后续wifi开启操作。
} catch (RemoteException e) {
return false;
}
}
其中AppOps就是受控权限管理的类。但是为什么开发的时候都没有弹出类似的提示呢?是因为这个机制没有开启。
这个机制检查是否开启是在
public static boolean isStrictEnable() {
return SystemProperties.getBoolean("persist.sys.strict_op_enable", false);
}
因此在system.prop 文件下添加
persist.sys.strict_op_enable=true
即可开启严格模式
另外,预置软件很多调用权限都没有弹窗这是因为还有一个策略文件需要修改。高通平台在如下路径。
device/qcom/common/appops/appops_policy.xml
<appops-policy version="1">
<user-app permission="ask" show="true"/> user-app类型的软件,ask表示询问,true弹窗。
<system-app permission="allowed" show="false"/>system-app allowed表示允许,false不用弹窗了。
<application>
<!-- Example:
<pkg name="com.android.dialer" type="system-app">
<op name="android:call_phone" permission="ask" show="true"/>
</pkg>
-->
<pkg name="com.android.calendar" type="system-app"> 这里是可以特指某些权限的询问或者不询问。
<op name="android:read_contacts" permission="ask" show="true"/>
</pkg>
<pkg name="com.android.email" type="system-app">
<op name="android:read_contacts" permission="ask" show="true"/>
</pkg>
<pkg name="com.android.soundrecorder" type="system-app"> 这里添加了录音权限询问的条目。需要单独添加system-app需要询问的话可参照这个例子。
<op name="android:record_audio" permission="ask" show="true"/>
</pkg>
</application>
</appops-policy>