DevicePolicyManager,设备策略管理器。顾名思义,DevicePolicyManager为Android系统的管理提供了一套策略,有三种方案
三者的关系由浅入深提供设备管理的方法
过用户授权自己的应用设备管理权限后,可以在代码中修改一些系统设置,需要在应用中配置一个xml,xml中声明相应的权限,这些权限基本代表了DeviceAdmin可以使用的能力
具体功能如下:
ProfileOwner 译为配置文件所有者,在Android5.0系统推出。ProfileOwner涵盖了所有DeviceAdmin用户的管理能力。Google为了细化行业领域的管理而推出了这一组API,也被称为Android for work,旨在让用户在体验上可以轻松的兼顾生活和工作,可以将你的个人信息和工作信息等进行分类,随时查看
具体功能如下
隐藏应用,可停用制定应用并且不再界面显示,除非调用相应API恢复可用,否则该应用永远无法运行。可以用来开发应用黑白名单功能。
禁止卸载应用,被设置为禁止卸载的应用将成为受保护应用,无法被用户卸载,除非取消保护。
复用系统APP
修改系统设置
调节静音
修改用户图标
修改权限申请的策略
限制指定应用的某些功能
允许辅助服务
允许输入法服务
禁止截图
禁止蓝牙访问联系人
DeviceOwner, 设备所有者,Android5.0引入。同样的,DeviceOwner涵盖了所有DeviceAdmin用户的管理能力,是一类特殊的设备管理员,具有在设备上创建和移除辅助用户以及配置全局设置的额外能力。DeviceOwner完善了行业用户的**MDM(Mobile Device Manager)**行业管理能力,主要能力如下:
编写广播接收器DeviceReceiver继承DeviceAdminReceiver
public class DeviceReceiver extends DeviceAdminReceiver {
@Override
public void onEnabled(Context context, Intent intent) {
// 设备管理:可用
Toast.makeText(context, "设备管理:可用", Toast.LENGTH_SHORT).show();
}
@Override
public void onDisabled(final Context context, Intent intent) {
// 设备管理:不可用
Toast.makeText(context, "设备管理:不可用", Toast.LENGTH_SHORT).show();
}
}
AndroidManifest注册广播接收器
<receiver
android:name=".DeviceReceiver"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/device_admin" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
<action android:name="android.app.action.DEVICE_ADMIN_DISABLE_REQUESTED" />
<action android:name="android.app.action.DEVICE_ADMIN_DISABLED" />
<category android:name="android.intent.category.HOME" />
intent-filter>
receiver>
xml下添加文件device_admin.xml
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<limit-password />
<watch-login />
<reset-password />
<force-lock />
<wipe-data />
<disable-camera />
<disable-keyguard-features />
<set-global-proxy />
<expire-password />
uses-policies>
device-admin>
激活设备管理器
// 激活设备管理器
public void enableDeviceManager() {
//判断是否激活 如果没有就启动激活设备
if (!devicePolicyManager.isAdminActive(componentName)) {
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
mContext.getString(R.string.dm_extra_add_explanation));
mContext.startActivity(intent);
} else {
Toast.makeText(mContext, "设备已经激活,请勿重复激活", Toast.LENGTH_SHORT).show();
}
}
移除设备管理器
// 取消激活设备管理器
public void disableDeviceManager() {
devicePolicyManager.removeActiveAdmin(componentName);
}
PASSWORD_QUALITY_ALPHABETIC // 用户输入的密码必须要有字母(或者其他字符)\n
PASSWORD_QUALITY_ALPHANUMERIC // 用户输入的密码必须要有字母和数字。\n
PASSWORD_QUALITY_NUMERIC // 用户输入的密码必须要有数字\n
PASSWORD_QUALITY_SOMETHING // 由设计人员决定的。\n
PASSWORD_QUALITY_UNSPECIFIED // 对密码没有要求。\n
// 设置解锁方式 需要激活设备管理器(配置策略)
public void setLockMethod() {
if (devicePolicyManager.isAdminActive(componentName)) {
Intent intent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD);
devicePolicyManager.setPasswordQuality(componentName,
DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
mContext.startActivity(intent);
} else {
Toast.makeText(mContext, "请先激活设备", Toast.LENGTH_SHORT).show();
}
}
//立刻锁屏
public void lockNow() {
if (devicePolicyManager.isAdminActive(componentName)) {
devicePolicyManager.lockNow();
} else {
Toast.makeText(mContext, "请先激活设备", Toast.LENGTH_SHORT).show();
}
}
// 设置多长时间后锁屏
public void lockByTime(long time) {
if (devicePolicyManager.isAdminActive(componentName)) {
devicePolicyManager.setMaximumTimeToLock(componentName, time);
} else {
Toast.makeText(mContext, "请先激活设备", Toast.LENGTH_SHORT).show();
}
}
// 恢复出厂设置
public void wipeData() {
if (devicePolicyManager.isAdminActive(componentName)) {
devicePolicyManager.wipeData(DevicePolicyManager.WIPE_EXTERNAL_STORAGE);
} else {
Toast.makeText(mContext, "请先激活设备", Toast.LENGTH_SHORT).show();
}
}
// 禁用相机
public void disableCamera(boolean disabled) {
if (devicePolicyManager.isAdminActive(componentName)) {
devicePolicyManager.setCameraDisabled(componentName, disabled);
} else {
Toast.makeText(mContext, "请先激活设备", Toast.LENGTH_SHORT)
.show();
}
}
// 重置密码
public void resetPassword(String password) {
if (devicePolicyManager.isAdminActive(componentName)) {
devicePolicyManager.resetPassword(password,
DevicePolicyManager.RESET_PASSWORD_REQUIRE_ENTRY);
} else {
Toast.makeText(mContext, "请先激活设备", Toast.LENGTH_SHORT).show();
}
}
这个东西,我一直不知道有什么用,有谁知道可以说下
// 加密存储
public int encryptedStorage(boolean isEncrypte) {
if (devicePolicyManager.isAdminActive(componentName)) {
int result = devicePolicyManager.setStorageEncryption(componentName, isEncrypte);
Log.d(TAG, "encryptedStorage:result->" + result);
return result;
} else {
Toast.makeText(mContext, "请先激活设备", Toast.LENGTH_SHORT).show();
}
return -1;
}
https://github.com/ddssingsong/DevicePolicyManager