android设备管理器的开启方式基本都是同一套写法,所以这篇文章主要对设备管理器api做一个收集归类。
一、开启设备管理器
创建DeviceReceiver继承DeviceAdminReceiver:
public class DeviceReceiver extends DeviceAdminReceiver {
//可重写父类方法,监听密码变动、设备管理器开发关闭等,非必须。
}
AndroidManifest注册:
<receiver
android:name=".DeviceReceiver"
android:description="@string/app_name"
android:label="@string/app_name"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/admin" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
res/xml目录下添加文件 admin.xml:
<?xml version="1.0" encoding="utf-8"?>
<device-admin xmlns:android="http://schemas.android/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>
激活和取消设备管理器:
DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName componentName = new ComponentName(context, DeviceReceiver.class);
//激活
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
context.startActivity(intent);
//取消
dpm.removeActiveAdmin(componentName);
查询设备管理器是否已经激活:
dpm.isAdminActive(componentName) //true 已激活, false未激活
二、常用api
以下用到的dpm和componentName同上文
设置最大休眠时间/待机时长
dpm.setMaximumTimeToLock(ComponentName admin, long timeMs)
禁用相机
dpm.setCameraDisabled(ComponentName admin, boolean disabled);
恢复出厂设置
dpm.wipeData(1);
密码规则
/**
* 设置密码最少需要的小写字母
* @param context
*/
public static void setPwdLowletter(Context context, int num){
DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName mAdminName = new ComponentName(context, DeviceReceiver.class);
dpm.setPasswordQuality(mAdminName, DevicePolicyManager.PASSWORD_QUALITY_COMPLEX);
dpm.setPasswordMinimumLowerCase(mAdminName, num);
}
/**
* 设置密码最少需要的大写字母
* @param context
*/
public static void setPwdUpletter(Context context, int num){
DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName mAdminName = new ComponentName(context, DeviceReceiver.class);
dpm.setPasswordQuality(mAdminName, DevicePolicyManager.PASSWORD_QUALITY_COMPLEX);
dpm.setPasswordMinimumUpperCase(mAdminName, num);
}
/**
* 设置密码最少需要的数字
* @param context
*/
public static void setPwdNum(Context context, int num){
DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName mAdminName = new ComponentName(context, DeviceReceiver.class);
dpm.setPasswordQuality(mAdminName, DevicePolicyManager.PASSWORD_QUALITY_COMPLEX);
dpm.setPasswordMinimumNumeric(mAdminName, num);
}
/**
* 设置密码最少需要的符号
* @param context
*/
public static void setPwdSymbol(Context context, int num){
DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName mAdminName = new ComponentName(context, DeviceReceiver.class);
dpm.setPasswordQuality(mAdminName, DevicePolicyManager.PASSWORD_QUALITY_COMPLEX);
dpm.setPasswordMinimumSymbols(mAdminName, num);
}
/**
* 设置密码规则:无规则
* @param context
*/
public static void setPasswordUnspecified(Context context){
DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName mAdminName = new ComponentName(context, DeviceReceiver.class);
dpm.setPasswordQuality(mAdminName, DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
}
/**
* 设置密码最大失败次数
* @param mContext
* @param count
*/
public static void setMaximumFailedPasswordsForWipe(Context mContext, int count){
ComponentName mAdminName = new ComponentName(mContext, DeviceReceiver.class);
DevicePolicyManager dpm = (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
dpm.setMaximumFailedPasswordsForWipe(mAdminName, count);
}
锁屏
dpm.lockNow();
修改密码:拥有设备管理器权限时,在android7.0及以上设备时,该api只能对没有设置密码的设备 设置新密码,如果已经设置了密码,则api无效。但是如果拥有deviceowner权限,则api可以对已有密码的设备修改密码
dpm.resetPassword("1234", 0);//密码为1234
-android权限级别探索(一),api23以上申请普通权限常见写法,及api21查询权限方法
android权限级别探索(二),设备管理器(DeviceAdmin)开启和使用及常见api
android权限级别探索(三),设置 DeviceOwner及api收集
android权限级别探索(四),Work Profile/Profile Owner的开启与功能
更多推荐
android权限级别探索(二),设备管理器(DeviceAdmin)开启和使用及常见api
发布评论