设备管理器的作用:
.锁定屏幕
.擦除数据(或恢复出厂设置)
.设置密码状态(重置密码 、限制密码长度、密码过期时间等)
.监视登录状态
.禁用摄像头
.加密存储
.禁用锁屏相关特性
.等
1、获取设备管理器
DevicePolicyManager = policyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); //获取设备管理器
ComponentName componentName = new ComponentName(this, AdminReceiver.class); //创建设备组件 需要创建AdminReceiver
2.创建AdminReceiver
public class AdminReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
}
}
3.在src目录下创建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 />
<expire-password />
<encrypted-storage />
<disable-camera />
<disable-keyguard-features />
</uses-policies>
</device-admin>
4、在values目录的strings文件中创建设备名称与描述
<resources>
<string name="admin_description">设备管理器功能描述string>
<string name="admin">设备管理器名称string>
resources>
5、AndroidManifest.xml中声明AdminReceiver
<receiver
android:name="com.yu.onekeylock.AdminReceiver"
android:description="@string/admin_description"
android:label="@string/admin"
-声明需要的权限-->
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" />
intent-filter>
receiver>
6、使用设备管理器
在使用之前,需要判断是否激活
public void doit(View view) {
// 判断设备管理器是否激活
if (policyManager.isAdminActive(componentName)) {
policyManager.lockNow(); // 锁屏
// policyManager.resetPassword("123456", 0); //重置密码
// policyManager.wipeData(flags);
finish();
}else{
Toast.makeText(MainActivity.this , "必须先激活设备管理器!", 1).show();
activateManage();
}
}
激活设备管理器:
private void activateManage() {
// 隐式启动
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
//附加数据
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
//描述
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "激活后可以方便锁屏等操作");
startActivity(intent);
}
激活设备管理器后就可以进行相关功能操作了
policyManager.lockNow(); // 锁屏
// policyManager.resetPassword("123456", 0); //重置密码
// policyManager.wipeData(flags);
...
注:要卸载应用时,需先取消激活设备管理器
public void unInstall(View view) {
// 取消激活
policyManager.removeActiveAdmin(componentName);
// 卸载程序
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivity(intent);
}
/**
*
Author: pecuyu
*
Date: 2017/12/8
*
TODO:Admin工具类
*/
public class AdminUtil {
private Context mContext;
private final DevicePolicyManager policyManager;
private final ComponentName componentName;
public AdminUtil(Context context) {
mContext = context;
policyManager = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
componentName = new ComponentName(context, AdminReceiver.class);
}
public void activateAdmin() {
// 隐式启动
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
//附加数据
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
//描述
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "激活后可以方便锁屏等操作");
mContext.startActivity(intent);
}
public void uninstall() {
// 取消激活
policyManager.removeActiveAdmin(componentName);
// 卸载程序
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("package:" + mContext.getPackageName()));
mContext.startActivity(intent);
}
// 判断设备管理器是否激活
public boolean isAdminActive() {
return policyManager.isAdminActive(componentName);
}
public void lockNow() {
policyManager.lockNow(); // 锁屏
}
public void disableCamera(boolean enable) {
policyManager.setCameraDisabled(componentName, enable);
}
/**
*
* @param flags
* {@link DevicePolicyManager#WIPE_EXTERNAL_STORAGE} and {
* @link DevicePolicyManager#WIPE_RESET_PROTECTION_DATA}.
*/
public void wipeData(int flags) {
policyManager.wipeData(flags);
}
/**
* 关闭特性功能
*
* @param which which feature to disable
* know features:
*
{@link DevicePolicyManager#KEYGUARD_DISABLE_FEATURES_NONE} (default),
*
{@link DevicePolicyManager#KEYGUARD_DISABLE_WIDGETS_ALL},
*
{@link DevicePolicyManager#KEYGUARD_DISABLE_TRUST_AGENTS},
*
{@link DevicePolicyManager#KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS},
*
{@link DevicePolicyManager#KEYGUARD_DISABLE_SECURE_NOTIFICATIONS},
*
{@link DevicePolicyManager#KEYGUARD_DISABLE_FINGERPRINT},
*
{@link DevicePolicyManager#KEYGUARD_DISABLE_FEATURES_ALL}
*/
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public void disableFeature(int which) {
policyManager.setKeyguardDisabledFeatures(componentName, which);
}
}