目录
📘 简单定义
📘应用启用设备管理者
📂 文件位置
🧠 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 模式 |
存储加密 | 启用设备加密、审计日志获取 |
恢复出厂 | 恢复出厂、清除企业数据 |