DevicePolicyManager,设备策略管理器。顾名思义,DevicePolicyManager为Android系统的管理提供了一套策略,有三种方案

  • Device Administration, 设备管理员
  • Profile Owner, 配置文件所有者
  • Device Owner, 设备所有者

三者的关系由浅入深提供设备管理的方法

Device Admin

过用户授权自己的应用设备管理权限后,可以在代码中修改一些系统设置,需要在应用中配置一个xml,xml中声明相应的权限,这些权限基本代表了DeviceAdmin可以使用的能力

具体功能如下:

  • 删除所有数据
  • 更改屏幕锁定
  • 设置密码规则
  • 监视屏幕解锁尝试次数
  • 锁定屏幕
  • 设置屏幕锁定密码的有效期
  • 设定存储设备加密
  • 停用相机

ProfileOwner

ProfileOwner 译为配置文件所有者,在Android5.0系统推出。ProfileOwner涵盖了所有DeviceAdmin用户的管理能力。Google为了细化行业领域的管理而推出了这一组API,也被称为Android for work,旨在让用户在体验上可以轻松的兼顾生活和工作,可以将你的个人信息和工作信息等进行分类,随时查看

具体功能如下

  • 隐藏应用,可停用制定应用并且不再界面显示,除非调用相应API恢复可用,否则该应用永远无法运行。可以用来开发应用黑白名单功能。

  • 禁止卸载应用,被设置为禁止卸载的应用将成为受保护应用,无法被用户卸载,除非取消保护。

  • 复用系统APP

  • 修改系统设置

  • 调节静音

  • 修改用户图标

  • 修改权限申请的策略

  • 限制指定应用的某些功能

  • 允许辅助服务

  • 允许输入法服务

  • 禁止截图

  • 禁止蓝牙访问联系人

DeviceOwner

DeviceOwner, 设备所有者,Android5.0引入。同样的,DeviceOwner涵盖了所有DeviceAdmin用户的管理能力,是一类特殊的设备管理员,具有在设备上创建和移除辅助用户以及配置全局设置的额外能力。DeviceOwner完善了行业用户的**MDM(Mobile Device Manager)**行业管理能力,主要能力如下:

  • 设置网络时间同步, 设置后无法从Settings取消
  • 用户管理, 创建用户、删除用户等
  • 管理账号系统
  • 清除锁屏
  • 设置Http代理
  • 禁止状态栏
  • 通知等待更新
  • 禁用相机
  • 隐藏应用
  • 禁止卸载应用
  • 复用系统APP
  • 获取wifi地址
  • 重启系统

2. Demo演示Device Admin

  • 激活设备管理器
  • 取消激活设备管理器
  • 设置解锁方式 不需要激活就可以运行
  • 设置解锁方式 需要激活设备管理器
  • 立即锁屏
  • 设置5秒后锁屏 充电状态下不管用
  • 清除数据 恢复出厂设置
  • 修改锁密码(PIN)
  • 禁用相机

3. 开启设备管理器流程

  1. 编写广播接收器DeviceReceiver继承DeviceAdminReceiver

    public class DeviceReceiver extends DeviceAdminReceiver {@Overridepublic 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();}
    }
    
  2. AndroidManifest注册广播接收器

         <!--设备管理 begin --><receiverandroid:name=".DeviceReceiver"android:permission="android.permission.BIND_DEVICE_ADMIN"><meta-dataandroid: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><!--设备管理 end -->
    
  3. xml下添加文件device_admin.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 /><!--禁用相机--><disable-camera /><disable-keyguard-features /><set-global-proxy /><!-- 设置锁屏密码的有效期 --><expire-password /></uses-policies>
    </device-admin>
    
  4. 激活设备管理器

       // 激活设备管理器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();}}
    
  5. 移除设备管理器

       // 取消激活设备管理器public void disableDeviceManager() {devicePolicyManager.removeActiveAdmin(componentName);}

4. 设置锁屏策略

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();}}

5. 立即锁屏

   //立刻锁屏public void lockNow() {if (devicePolicyManager.isAdminActive(componentName)) {devicePolicyManager.lockNow();} else {Toast.makeText(mContext, "请先激活设备", Toast.LENGTH_SHORT).show();}}

6. 设置一段时间后锁屏

  // 设置多长时间后锁屏public void lockByTime(long time) {if (devicePolicyManager.isAdminActive(componentName)) {devicePolicyManager.setMaximumTimeToLock(componentName, time);} else {Toast.makeText(mContext, "请先激活设备", Toast.LENGTH_SHORT).show();}}

7. 恢复出厂设置(谨慎操作)

   // 恢复出厂设置public void wipeData() {if (devicePolicyManager.isAdminActive(componentName)) {devicePolicyManager.wipeData(DevicePolicyManager.WIPE_EXTERNAL_STORAGE);} else {Toast.makeText(mContext, "请先激活设备", Toast.LENGTH_SHORT).show();}}

8. 禁用相机

  // 禁用相机public void disableCamera(boolean disabled) {if (devicePolicyManager.isAdminActive(componentName)) {devicePolicyManager.setCameraDisabled(componentName, disabled);} else {Toast.makeText(mContext, "请先激活设备", Toast.LENGTH_SHORT).show();}}

9. 重置密码

   // 重置密码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();}}

10.设定存储设备加密

这个东西,我一直不知道有什么用,有谁知道可以说下

 // 加密存储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

Android 设备管理器 理解和使用相关推荐

  1. 关于android设备管理器的一些分析

    想必很多人都知道轰动一时android木马OBAD,该木马利用android设备管理器的漏洞,当用户激活设备管理器后,该程序会在setting设备管理器列表隐藏,应用程序激活成设备管理器后,可以实现锁 ...

  2. Android设备管理器

    如果您丢掉了与自己的Google帐户相关联的Android设备,Android设备管理器可以帮您找到.锁定并清空该设备. 如果您确信自己的设备被盗了,请与执法机构联系,而不要试图自行找回设备. 启用A ...

  3. Android设备管理器漏洞2--阻止用户取消激活设备管理器

    2013年6月,俄罗斯安全厂商卡巴斯基发现了史上最强手机木马-Obad.A,该木马利用了一个未知的Android设备管理器漏洞(ANDROID-9067882),已激活设备管理器权限的手机木马利用该漏 ...

  4. 我遇到的在VS2019中使用Android设备管理器创建模拟器点击启动后提示 系统映像不完整,无法启动 问题的解决办法

    我在按照文档使用 Android Device Manager 管理虚拟设备 - Xamarin | Microsoft Docs创建了一个模拟器,然后点击启动的时候一直提示 "系统映像不完 ...

  5. Android设备管理器DevicePolicyManager的使用和理解

    上周项目中有个在apk上层实现息屏亮屏的需求,刚开始在网上看到是DevicePolicyManager来实现的,虽然最后根据自己项目特定的环境下并没有使用DevicePolicyManager这个类去 ...

  6. android 设备管理器 设置,设置android应用为设备管理器

    1.新建一个Receiver(MyAdmin),作为广播接收者,继承DeviceAdminReceiver.在示例中,该Receiver没有实质性代码: package com.example.loc ...

  7. win10 android设备管理器,四种方法教你打开win10专业版设备管理器

    众所周知,win10系统设备管理器设备功能强大,更新驱动.禁用.卸载等操作都会用到,由于刚升级到Win10系统,对一些操作都不太熟悉,比如win10设备管理器在哪里打开?打开设备管理器的方法有很多,网 ...

  8. android 设备管理器 解锁,4种方法解锁Android手机模式锁定而无需恢复出厂设置

    第1部分:如何使用dr.fone解锁Android模式锁定而无需恢复出厂设置? 如果您正在寻找一种快速可靠的方式来移动任何Android设备上的锁定屏幕,那么只需尝试dr.fone - Android ...

  9. Android 黑科技(设备管理器等)

    > 修改系统位置信息实现自身隐藏功能 Android中Xposed框架篇-修改系统位置信息实现自身隐藏功能-http://www.wjdiankong.cn/android%E4%B8%ADxp ...

  10. android源生setting华为,Android 设置默认桌面,默认应用,辅助功能,电池优化,设备管理器,悬浮窗等...

    Android 部分系统设置桌面,默认应用,辅助功能,电池优化,设备管理器,悬浮窗,有权限查看使用情况,开机自启动,锁屏不清理等 部分功能适配了华为手机与小米手机. 设置默认桌面: //华为手机上 I ...

最新文章

  1. 2019年了,中文分词到底该怎么做?中文分词十年方法大盘点(附下载)
  2. linux 目录说明
  3. 排序之二分查找插入排序算法
  4. 修改 SQL Server 服务器的 IP 地址
  5. mysql increment by 2_关于mysql auto-increment
  6. boost::hash_range相关的测试程序
  7. 【PYTHON 笔记】:捕捉异常
  8. java中request常用方法小结
  9. android中TextView属性之autoText解析
  10. SpringBoot+MyBatisPlus+Vue+ElementUI实现前后端分离的物业管理系统
  11. HACKTHEBOX——Starting Point Tier0
  12. 解决navicat闪退
  13. 江西2万余个村庄整治建设 古村落旧貌换新颜
  14. KBP410-ASEMI开关电源整流器件KBP410
  15. 【C语言】深入理解二级指针
  16. 常见网络故障排查方法
  17. 01-赵志勇机器学习-Logistics_Regression-train
  18. 最近在学习python,做了一道人机大战的题目,分享一下,虽然可能有些麻烦,但是每个人思维是不同的。...
  19. Windows编程实现俄罗斯方块
  20. 大数据成互联网必争之地 迅雷布局抢先机

热门文章

  1. 迈普路由器访问控制列表配置命令_迈普路由器配置手册
  2. win10微软商店/账号登录一直转圈
  3. 三维图像专业处理软件Dragonfly的快捷键设置
  4. ios-webkit-debug-proxy 说明
  5. 光流的概念以及 Lucas-Kanade 光流法
  6. 回顾2017展望2018
  7. 【使用Modern UI快速开发WPF应用】
  8. 菜菜的刷题日记 | 215. 数组中的第K个最大元素
  9. win10+deepin安装 linux修改系统启动项
  10. HDU 4939 Stupid Tower Defense 简单DP