我们有时候会用到DeviceAdmin权限,一般来说,需要用户手动到设备管理器里面激活应用,也可以APP通过startActivity的方式跳转到激活页面,这两个都需要用户手动点击激活,其实DevicePolicyManager本身有提供setActiveAdmin这个方法设置设备管理器应用的,不过这个方法是隐藏方法,并且需要system权限
下面提供一种代码方式直接激活设备管理器的方式
必要条件
1.系统签名
2.uid 设置成 android.uid.system
代码如下
private void mRefSetActiveAdmin(ComponentName policyReceiver, boolean refreshing) {
DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE)
Class<?> refDPM = dpm.getClass();
try {
Method[] methods = refDPM.getDeclaredMethods();
Method refSetActiveAdmin = null;
for (Method method : methods) {
if(method.getName().equals("setActiveAdmin")){
if(method.getParameterTypes().length == 2){
refSetActiveAdmin = method;//Tips 为什么要用遍历的方式获取,因为用普通的参数类型方式无法获取到,这个情况遇到很多次了,明明包含该方法但就是无法获取到,有大神可以解释一下么。
break;
}
}
}
refSetActiveAdmin.setAccessible(true);
refSetActiveAdmin.invoke(dpm, policyReceiver, refreshing);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
使用方式
ComponentName componentName = new ComponentName(this, DeviceReceiver.class);//DeviceReceiver是admin类继承了DeviceAdminReceiver
mRefSetActiveAdmin(componentName, false);
以上就可以激活指定的设备管理器Admin
本文地址:https://blog.csdn.net/OneT1me/article/details/107319531
如对本文有疑问, 点击进行留言回复!!
Android SDK Manager 不知为什么突然打不开了?看这里
监听Android系统发出的插入SD卡并且已正确安装(识别)时发出的广播
RecyclerView三种常用效果的实现方法-android-kotlin
Android Studio app启动错误 Error running :Default Activity not found
网友评论