android11 DevicePolicyManager浅析
目录
📘 简单定义
📘应用启用设备管理者
📂 文件位置
🧠 DevicePolicyManager 功能分类举例
🛡️ 1. 安全策略控制
📷 2. 控制硬件功能
🧰 3. 应用管理
🔒 4. 用户管理
📦 5. 文件与存储控制
🌐 6. 网络配置管理(DO 模式)
🧪 7. 企业功能(仅设备所有者)
🧩 8. Kiosk 模式(锁定应用)
🧯 9. 恢复出厂 / 擦除用户数据
📥 10. 通知和系统设置控制
🛑 权限与前提条件
📚 总结表格
在 Android 11(R) 中,DevicePolicyManager.java 是系统框架中的一个核心类,它提供了设备策略管理接口,允许**设备管理员(Device Admin)或设备拥有者(Device Owner)**对 Android 设备的行为、安全性和功能进行控制和限制。
📘 简单定义
DevicePolicyManager是 Android 提供的 API 类(位于android.app.admin.DevicePolicyManager),用于对设备进行企业级管理,比如:强制密码、安全锁、禁用功能、擦除数据、控制 app 等。
📘应用启用设备管理者
public void enableDeviceOwner(Activity activity) {DevicePolicyManager mDPM = (DevicePolicyManager) activity.getSystemService (Context.DEVICE_POLICY_SERVICE);ComponentName testDeviceAdmin = new ComponentName ("com.xx.pkg", "com.xx.pkg.receiver.MyAdmin");boolean adminActive = mDPM.isAdminActive (testDeviceAdmin);if (!adminActive) {Intent intent = new Intent (DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);intent.putExtra (DevicePolicyManager.EXTRA_DEVICE_ADMIN, testDeviceAdmin);intent.putExtra (DevicePolicyManager.EXTRA_ADD_EXPLANATION, "");activity.startActivityForResult (intent, REQUEST_ACTIVATE);}
}public class MyAdmin extends DeviceAdminReceiver {private static final String TAG=MyAdmin.class.getSimpleName();@Overridepublic void onReceive(@NonNull Context context, @NonNull Intent intent) {super.onReceive (context, intent);String action = intent.getAction();Log.d(TAG,"action="+action);}@Overridepublic void onEnabled(Context context, Intent intent) {Log.d (TAG, "onEnabled: 设备管理器已启用");}@Overridepublic void onDisabled(Context context, Intent intent) {Log.d (TAG, "onDisabled: 设备管理器已禁用");}@Overridepublic void onPasswordChanged(@NonNull Context context, @NonNull Intent intent) {super.onPasswordChanged (context, intent);Log.d (TAG, "onPasswordChanged: 密码改变");}@Overridepublic void onPasswordFailed(@NonNull Context context, @NonNull Intent intent) {super.onPasswordFailed (context, intent);Log.d (TAG, "onPasswordFailed: 密码尝试失败");}@Overridepublic void onPasswordExpiring(@NonNull Context context, @NonNull Intent intent) {super.onPasswordExpiring (context, intent);Log.d (TAG, "onPasswordExpiring: 密码过期");}
}
📂 文件位置
源码路径(AOSP Android 11):
frameworks/base/core/java/android/app/admin/DevicePolicyManager.java
这个类实际上是一个系统服务的 Client API,对应的系统服务是:
DevicePolicyManagerService.java 位置:frameworks/base/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
🧠 DevicePolicyManager 功能分类举例
以下是所有主要功能 + 示例代码(或行为描述)👇:
🛡️ 1. 安全策略控制
| 功能 | 描述 | 示例 |
|---|---|---|
| 强制锁屏密码 | 设置密码类型、长度 | setPasswordQuality(), setPasswordMinimumLength() |
| 设置锁屏超时 | 设置自动锁屏时间 | setMaximumTimeToLock() |
| 设置错误密码尝试次数 | 限制输错密码后擦除数据 | setMaximumFailedPasswordsForWipe() |
| 主动锁屏 | 立即锁屏设备 | lockNow() |
| 清除数据 | 恢复出厂设置 | wipeData() |
📷 2. 控制硬件功能
| 功能 | 示例方法 | 行为 |
|---|---|---|
| 禁用摄像头 | setCameraDisabled() | 不可使用前后摄像头 |
| 禁用屏幕截图 | setScreenCaptureDisabled() | 无法截图或录屏 |
| 控制麦克风 | setMicrophoneDisabled() | 禁止录音 |
| 限制 USB | setUsbDataSignalingEnabled()(仅系统) | 禁止 USB 数据传输 |
| 禁用 Wi-Fi / 蓝牙(DO 模式) | addUserRestriction() + UserManager.DISALLOW_WIFI | 限制连接无线功能 |
🧰 3. 应用管理
| 功能 | 方法 | 描述 |
|---|---|---|
| 安装/卸载 app(静默) | installExistingPackage()、setApplicationHidden() | 无用户干预地安装/隐藏 app(需系统权限) |
| 禁用 app | setApplicationBlocked() | 阻止某些 app 使用 |
| 清除 app 数据 | clearApplicationUserData() | 清除指定应用的数据 |
| 查询包管理策略 | isPackageSuspended()、isApplicationHidden() | 查询 app 状态 |
🔒 4. 用户管理
| 功能 | 方法 | 描述 |
|---|---|---|
| 添加/删除用户 | createAndManageUser() | 创建受管理用户 |
| 禁止添加账户 | addUserRestriction() + DISALLOW_MODIFY_ACCOUNTS | 禁止添加 Google 或其他账户 |
| 限制切换用户 | DISALLOW_USER_SWITCH | 限制用户切换操作 |
| 限制 factory reset | DISALLOW_FACTORY_RESET | 防止被用户手动恢复出厂 |
📦 5. 文件与存储控制
| 功能 | 方法 | 描述 |
|---|---|---|
| 启用存储加密 | setStorageEncryption() | 要求磁盘加密 |
| 清除安全日志 | retrieveSecurityLogs() | 获取审计日志(仅设备拥有者) |
| 控制外部存储访问 | DISALLOW_MOUNT_PHYSICAL_MEDIA | 阻止访问 SD 卡 |
🌐 6. 网络配置管理(DO 模式)
| 功能 | 方法 | 描述 |
|---|---|---|
| 配置 Wi-Fi | setGlobalSetting() / setWifiSsidPolicy() | 设置设备 Wi-Fi 策略 |
| 限制 VPN 设置 | DISALLOW_CONFIG_VPN | 阻止用户配置 VPN |
| 配置代理 | 使用 DevicePolicyManagerService 中间件或自定义网络策略 | 控制企业网络行为 |
🧪 7. 企业功能(仅设备所有者)
| 功能 | 方法 | 描述 |
|---|---|---|
| 设置企业徽标 | setOrganizationColor(), setOrganizationName() | 设置工作资料显示名称/颜色 |
| 控制主屏幕布局 | setAffiliationIds() | 限制主界面自定义 |
| 设置默认主屏 | setLockTaskPackages() | 限制 app 之间切换(Kiosk 模式) |
🧩 8. Kiosk 模式(锁定应用)
| 功能 | 方法 | 描述 |
|---|---|---|
| 设置锁定应用 | setLockTaskPackages() | 只允许使用特定 app |
| 启动锁定模式 | startLockTask() | 类似自助机、展示设备的封闭式体验 |
| 停止锁定模式 | stopLockTask() | 恢复正常状态 |
🧯 9. 恢复出厂 / 擦除用户数据
| 功能 | 方法 | 描述 |
|---|---|---|
| 清除所有数据 | wipeData() | 直接恢复出厂设置 |
| 仅清除工作资料 | clearProfileOwner() | 用于企业环境清除公司数据 |
📥 10. 通知和系统设置控制
| 功能 | 方法 | 描述 |
|---|---|---|
| 限制通知栏 | DISALLOW_STATUS_BAR(系统) | 阻止下拉通知栏 |
| 禁用输入法切换 | DISALLOW_CONFIG_INPUT_METHODS | 固定使用某输入法 |
| 控制亮度/音量 | 结合 Settings.System 权限 | 改变系统设置值 |
🛑 权限与前提条件
| 模式 | 功能范围 |
|---|---|
| Device Admin(旧) | 受限功能(Android 10 及后续限制更多) |
| Device Owner(推荐) | 全功能,包括用户和系统控制 |
| Profile Owner(工作资料) | 只控制企业工作区(BYOD) |
| 系统 app + 签名 | 可静默激活、访问私有 API、更强控制 |
📚 总结表格
| 功能类别 | 示例功能 |
|---|---|
| 安全策略 | 密码规则、锁屏、擦除数据 |
| 硬件控制 | 相机、录音、USB、截图禁用 |
| 应用管理 | 安装/隐藏/卸载/限制 app |
| 网络管理 | 限制 Wi-Fi/VPN、设置代理 |
| 企业特性 | 设置工作资料、品牌信息、默认主屏 |
| 用户管理 | 添加用户、限制账户、Kiosk 模式 |
| 存储加密 | 启用设备加密、审计日志获取 |
| 恢复出厂 | 恢复出厂、清除企业数据 |
相关文章:
android11 DevicePolicyManager浅析
目录 📘 简单定义 📘应用启用设备管理者 📂 文件位置 🧠 DevicePolicyManager 功能分类举例 🛡️ 1. 安全策略控制 📷 2. 控制硬件功能 🧰 3. 应用管理 🔒 4. 用户管理 &am…...
《前端性能优化秘籍:打造极致用户体验》
在当下,网站和应用的性能表现直接关乎用户去留。快速加载、流畅交互的页面能让用户沉浸其中,反之,缓慢的响应速度则会让他们毫不犹豫地离开。对于前端开发者而言,性能优化不仅是技术追求,更是提升用户体验、增强产品竞…...
微信小程序实现table样式,自带合并行合并列
微信小程序在代码编写过程好像不支持原生table的使用,在开发过程中偶尔又得需要拿table来展示。 1.table效果展示 1.wxml <view class"table-container"><view class"table"><view class"table-row"><view cla…...
学习笔记十二——Rust 高阶函数彻底入门(超详细过程解析 + 每步数值追踪)
💡 彻底搞懂 Rust 高阶函数!新手最容易卡住的语法 调用流程全讲透(含逐步拆解) Rust 函数式编程中有一个常见却经常让人懵的概念:高阶函数(Higher-Order Function) 一看到 fn(i32) -> i32、…...
电脑的品牌和配置
我的笔记本是2020年买的,之前的订单找不到了,就知道是联想,不清楚具体的配置。 本文来源:腾讯元宝 检查系统信息(Windows) 这通常是 联想(Lenovo) 的型号代码。 81XV 是联想…...
Redis面试——常用命令
一、String (1)设置值相关命令 1.1.1 SET 功能:设置一个键值对,如果键已存在则覆盖旧值语法: SET key value [EX seconds] [PX milliseconds] [NX|XX]EX seconds:设置键的过期时间为 seconds 秒 PX milli…...
Swin-Transformer-UNet改进:融合Global-Local Spatial Attention (GLSA) 模块详解
目录 1.模块概述 2.swinUNet网络 3. 完整代码 1.模块概述 Global-Local Spatial Attention (GLSA) 是一种先进的注意力机制模块,专为计算机视觉任务设计,能够同时捕捉全局上下文信息和局部细节特征。 该模块通过创新的双分支结构和自适应融合机制,显著提升了特征表示能…...
ubuntu 向右拖动窗口后消失了、找不到了
这是目前单显示器的设置,因为实际只有1个显示器,之前的设置如下图所示,有2个显示器,一个主显示器,一个23寸的显示器 ubuntu 22.04 系统 今天在操作窗口时,向右一滑,发现这个窗口再也不显示了、找…...
大语言模型(LLMs)中的强化学习(Reinforcement Learning, RL)
第一部分:强化学习基础回顾 在深入探讨LLMs中的强化学习之前,我们先快速回顾一下强化学习的核心概念,确保基础扎实。 1. 强化学习是什么? 强化学习是一种机器学习范式,目标是让智能体(Agent)…...
2025最新版微软GraphRAG 2.0.0本地部署教程:基于Ollama快速构建知识图谱
一、前言 微软近期发布了知识图谱工具 GraphRAG 2.0.0,支持基于本地大模型(Ollama)快速构建知识图谱,显著提升了RAG(检索增强生成)的效果。本文手把手教你如何从零部署,并附踩坑记录和性能实测…...
泛型算法——只读算法(一)
在 C 标准库中,泛型算法的“只读算法”指那些 不会改变它们所操作的容器中的元素,仅用于访问或获取信息的算法,例如查找、计数、遍历等操作。 accumulate std::accumulate()是 C 标准库**numeric**头文件中提供的算法,用于对序列…...
Redis的常见数据类型
Redis 提供了多种数据类型,以满足不同的应用场景。以下是 Redis 的主要数据类型及其应用场景: 字符串(String): 描述:最基本的数据类型,存储单个键值对,值可以是字符串、整数或浮点数…...
Mybatis中dao(mapper)层几种传参方式
一、SQL语句中接收参数的方式有两种: 1、 #{}预编译 (可防止sql注入) 2、${}非预编译(直接拼接sql,不能防止sql注入) #{}和${}的区别是什么? #{} 占位符,相当于?,sql预编译&…...
网络安全知识点2
1.虚拟专用网VPN:VPN用户在此虚拟网络中传输私网流量,在不改变网络现状的情况下实现安全,可靠的连接 2.VPN技术的基本原理是利用隧道技术,对传输报文进行封装,利用VPN骨干网建立专用数据传输通道,实现报文…...
libevent服务器附带qt界面开发(附带源码)
本章是入门章节,讲解如何实现一个附带界面的服务器,后续会完善与优化 使用qt编译libevent源码演示视频qt的一些知识 1.主要功能有登录界面 2.基于libevent实现的服务器的业务功能 使用qt编译libevent 下载这个,其他版本也可以 主要是github上…...
智能体数据分析
数据概览: 展示智能体的累计对话次数、累计对话用户数、对话满意度、累计曝光次数。数据分析: 统计对话分析、流量分析、用户分析、行为分析数据指标,帮助开发者完成精准的全面分析。 ps:数据T1更新,当日12点更新前一天…...
[特殊字符] UnionFS(联合文件系统)原理解析:容器背后的存储技术
🔍 UnionFS(联合文件系统)原理解析:容器背后的存储技术 💡 什么是 UnionFS? UnionFS(联合文件系统) 是一种可以将多个不同来源的文件系统“合并”在一起的技术。它的核心思想是&am…...
STM32(M4)入门: 概述、keil5安装与模板建立(价值 3w + 的嵌入式开发指南)
前言:本教程内容源自信盈达教培资料,价值3w,使用的是信盈达的405开发版,涵盖面很广,流程清晰,学完保证能从新手入门到小高手,软件方面可以无基础学习,硬件学习支持两种模式ÿ…...
采用若依vue 快速开发系统功能模块
文章目录 运行若依项目 科室管理科室查询-后端代码实现科室查询-前端代码实现科室名称状态搜索科室删除-后端代码实现科室删除-前端代码实现科室新增-后端代码实现科室新增-前端代码实现科室修改-后端代码实现前端代码实现角色权限实现 运行若依项目 运行redis 创建数据库 修改…...
HTML:表格数据展示区
<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>人员信息表</title><link rel"styl…...
WIN11运行游戏时出现“ms-gamingoverlay”弹框的问题
针对WIN11运行游戏时出现“ms-gamingoverlay”弹框的问题,以下是经过验证的多种解决方法,结合不同场景需求提供对应方案: 一、关闭系统内置的游戏录制功能 禁用Xbox Game Bar及游戏录制 • 进入系统设置(WinI)→ 左侧选…...
Oracle测试题目及笔记(单选)
所有题目来自于互联网搜索 当 Oracle 服务器启动时,下列哪种文件不是必须的(D)。 A.数据文件 B.控制文件 C.日志文件 D.归档日志文件 数据文件、日志文件-在数据库的打开阶段使用 控制文件-在数…...
Jmeter创建使用变量——能够递增递减的计数器
Jmeter创建使用变量——能够递增递减的计数器 如下图所示,创建一个 取值需限定为0 2 4这三个值内的变量。 Increment:每次迭代后 递增的值,给计数器增加的值 Maximum value:计数器的最大值,如果超过最大值࿰…...
【LeetCode基础算法】滑动窗口与双指针
定长滑动窗口 总结:入-更新-出。 入:下标为 i 的元素进入窗口,更新相关统计量。如果 i<k−1 则重复第一步。 更新:更新答案。一般是更新最大值/最小值。 出:下标为 i−k1 的元素离开窗口,更新相关统计量…...
数据结构之BFS广度优先算法(腐烂的苹果)
队列这个数据结构在很多场景下都有使用,比如在实现二叉树的层序遍历,floodfill问题(等等未完成)中,都需要借助队列的先进先出特性,下面给出这几个问题的解法 经典的二叉树的层序遍历 算法图示,以下图所示的二叉树为例…...
道可云人工智能每日资讯|首届世界人工智能电影节在法国尼斯举行
道可云元宇宙每日简报(2025年4月15日)讯,今日元宇宙新鲜事有: 杭州《西湖区打造元宇宙产业高地的扶持意见》发布 杭州西湖区人民政府印发《西湖区打造元宇宙产业高地的扶持意见》。该意见已于4月4日正式施行,有效期至…...
火车头采集动态加载Ajax数据(无分页瀑布流网站)
为了先填充好数据在上线,在本地搭建了一个网站,并用火车头采集数据填充到里面。 开始很上手,因为找的网站的分类中是有分页的。很快捷的找到页面标识。 但是问题来了,如今很多网站都是采用的Ajax加载数据,根本没有分…...
Android Jetpack是什么与原生android 有什么区别
Android Jetpack是什么 Android Jetpack是Google推出的一套开发组件工具集,旨在帮助开发者更高效地构建高质量的Android应用。它包含多个库和工具,被分为架构、用户界面、行为和基础四大类。以下是一些Android Jetpack的示例: 架构组件 ViewModel:用于以生命周期的方式管理…...
Android Retrofit 框架适配器模块深入源码分析(五)
Android Retrofit 框架适配器模块深入源码分析 一、引言 在 Android 开发中,网络请求是一个常见且重要的功能。Retrofit 作为一个强大的网络请求框架,以其简洁的 API 和高度的可定制性受到了广泛的欢迎。适配器模块(CallAdapter)…...
Node.js模块化与npm
目录 一、模块化简介 二、CommonJS 规范 1. 基本语法 2. 导出模块 3. 导入模块 三、ECMAScript 标准(ESM) 1. 启用 ESM 一、默认导出与导入 1. 基本语法 2. 默认导出(每个模块仅一个) 3. 默认导入 二、命名导出与导入…...
