Android 设备管理器 理解和使用
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. 开启设备管理器流程
编写广播接收器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();} }
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 -->
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>
激活设备管理器
// 激活设备管理器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);}
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 设备管理器 理解和使用相关推荐
- 关于android设备管理器的一些分析
想必很多人都知道轰动一时android木马OBAD,该木马利用android设备管理器的漏洞,当用户激活设备管理器后,该程序会在setting设备管理器列表隐藏,应用程序激活成设备管理器后,可以实现锁 ...
- Android设备管理器
如果您丢掉了与自己的Google帐户相关联的Android设备,Android设备管理器可以帮您找到.锁定并清空该设备. 如果您确信自己的设备被盗了,请与执法机构联系,而不要试图自行找回设备. 启用A ...
- Android设备管理器漏洞2--阻止用户取消激活设备管理器
2013年6月,俄罗斯安全厂商卡巴斯基发现了史上最强手机木马-Obad.A,该木马利用了一个未知的Android设备管理器漏洞(ANDROID-9067882),已激活设备管理器权限的手机木马利用该漏 ...
- 我遇到的在VS2019中使用Android设备管理器创建模拟器点击启动后提示 系统映像不完整,无法启动 问题的解决办法
我在按照文档使用 Android Device Manager 管理虚拟设备 - Xamarin | Microsoft Docs创建了一个模拟器,然后点击启动的时候一直提示 "系统映像不完 ...
- Android设备管理器DevicePolicyManager的使用和理解
上周项目中有个在apk上层实现息屏亮屏的需求,刚开始在网上看到是DevicePolicyManager来实现的,虽然最后根据自己项目特定的环境下并没有使用DevicePolicyManager这个类去 ...
- android 设备管理器 设置,设置android应用为设备管理器
1.新建一个Receiver(MyAdmin),作为广播接收者,继承DeviceAdminReceiver.在示例中,该Receiver没有实质性代码: package com.example.loc ...
- win10 android设备管理器,四种方法教你打开win10专业版设备管理器
众所周知,win10系统设备管理器设备功能强大,更新驱动.禁用.卸载等操作都会用到,由于刚升级到Win10系统,对一些操作都不太熟悉,比如win10设备管理器在哪里打开?打开设备管理器的方法有很多,网 ...
- android 设备管理器 解锁,4种方法解锁Android手机模式锁定而无需恢复出厂设置
第1部分:如何使用dr.fone解锁Android模式锁定而无需恢复出厂设置? 如果您正在寻找一种快速可靠的方式来移动任何Android设备上的锁定屏幕,那么只需尝试dr.fone - Android ...
- Android 黑科技(设备管理器等)
> 修改系统位置信息实现自身隐藏功能 Android中Xposed框架篇-修改系统位置信息实现自身隐藏功能-http://www.wjdiankong.cn/android%E4%B8%ADxp ...
- android源生setting华为,Android 设置默认桌面,默认应用,辅助功能,电池优化,设备管理器,悬浮窗等...
Android 部分系统设置桌面,默认应用,辅助功能,电池优化,设备管理器,悬浮窗,有权限查看使用情况,开机自启动,锁屏不清理等 部分功能适配了华为手机与小米手机. 设置默认桌面: //华为手机上 I ...
最新文章
- 2019年了,中文分词到底该怎么做?中文分词十年方法大盘点(附下载)
- linux 目录说明
- 排序之二分查找插入排序算法
- 修改 SQL Server 服务器的 IP 地址
- mysql increment by 2_关于mysql auto-increment
- boost::hash_range相关的测试程序
- 【PYTHON 笔记】:捕捉异常
- java中request常用方法小结
- android中TextView属性之autoText解析
- SpringBoot+MyBatisPlus+Vue+ElementUI实现前后端分离的物业管理系统
- HACKTHEBOX——Starting Point Tier0
- 解决navicat闪退
- 江西2万余个村庄整治建设 古村落旧貌换新颜
- KBP410-ASEMI开关电源整流器件KBP410
- 【C语言】深入理解二级指针
- 常见网络故障排查方法
- 01-赵志勇机器学习-Logistics_Regression-train
- 最近在学习python,做了一道人机大战的题目,分享一下,虽然可能有些麻烦,但是每个人思维是不同的。...
- Windows编程实现俄罗斯方块
- 大数据成互联网必争之地 迅雷布局抢先机