目錄
📘 簡單定義
📘應用啟用設備管理者
📂 文件位置
🧠 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 模式 |
存儲加密 | 啟用設備加密、審計日志獲取 |
恢復出廠 | 恢復出廠、清除企業數據 |