1.在清单文件注册receiver
<receiver android:name=".MyAdmin"
android:permission="android.permission.BIND_DEVICE_ADMIN"> //这个权限必须要申请
<meta-data android:name="android.app.device_admin"
android:resource="@xml/my_admin" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
2.res/xml/my_admin.xml
//在MainActivity中通过startActivity启动DeviceAdminAdd界面,DeviceAdminAdd的oncreate方法中会解析此xml,然后加载将条目加载到device_admin_add.xml布局.
<?xml version="1.0" encoding="utf-8"?>
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<limit-password /> //设置密码的规则
<watch-login /> //监控屏幕解锁尝试次数
<reset-password /> //更改屏幕解锁密码
<force-lock /> //设备自动锁屏
<wipe-data /> //删除全部的数据
<expire-password /> //设置到期密码
<encrypted-storage /> //加密存储
<disable-camera /> //禁止使用摄像头
<disable-keyguard-features /> //禁止使用软键盘
</uses-policies>
</device-admin>
3.MainActivity.java
DevicePolicyManager manager = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
ComponentName mAdminName = new ComponentName(this, MyAdmin.class);
if (!manager .isAdminActive(mAdminName)) { //需要用户手动激活管理权限
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,mAdminName);
startActivity(intent);
//此Intent 会去调用Settings中的DeviceAdminAdd Activity界面,
}
DevicePolicyData类的mAdminMap集合,ArrayMap<ComponentName, ActiveAdmin> mAdminMap = new ArrayMap<>(); 存放获得权限的ComponentName;
4.MyAdmin.java
此类是一个Receiver,需要继承DeviceAdminReceiver,当设备状态改变时会调用对应的方法.如果不需要,则可不必实现.onReceive
方法在DeviceAdminReceiver中也已经实现,所以在MyAdmin中可以不实现.
public class MyAdmin extends DeviceAdminReceiver {
@Override
public DevicePolicyManager getManager(Context context) {
return super.getManager(context);
}
@Override
public ComponentName getWho(Context context) {
//谁申请管理权限
return super.getWho(context);
}
@Override
public void onEnabled(Context context, Intent intent) {
//启用了策略
super.onEnabled(context, intent);
}
@Override
public CharSequence onDisableRequested(Context context, Intent intent) {
//试图停用策略
return super.onDisableRequested(context, intent);
}
@Override
public void onDisabled(Context context, Intent intent) {
//停用了策略
super.onDisabled(context, intent);
}
@Override
public void onPasswordChanged(Context context, Intent intent) {
//改变了密码
super.onPasswordChanged(context, intent);
}
@Override
public void onPasswordFailed(Context context, Intent intent) {
//密码尝试失败
super.onPasswordFailed(context, intent);
}
@Override
public void onPasswordSucceeded(Context context, Intent intent) {
//密码尝试成功
super.onPasswordSucceeded(context, intent);
}
@Override
public void onPasswordExpiring(Context context, Intent intent) {
//密码过期
super.onPasswordExpiring(context, intent);
}
@Override
public void onReceive(Context context, Intent intent) {
//广播接收
super.onReceive(context, intent);
}
}
获取到管理权限后通过调用manager的set和get方法对设备状态进行设置和获取,如果只是要获取一些设备状态的话,则可不用去实现
DeviceAdminReceiver类,在获得管理权限后直接get相关属性方法即可,例如:boolean isCameraDisabled = manager.getCameraDisabled(null);
DevicePolicyManager使用
最新推荐文章于 2023-08-03 16:45:43 发布