禁止啟動某 App,或啟動時需輸入密碼/圖案。
| 方案 | 適用場景 | 實作難度 | 權限需求 | 繞過難度 |
|---|---|---|---|---|
| 第三方啟動器內建鎖定 (Nova, Niagara, Hyperion, CM Launcher 等) | 個人使用、家長控制 | 極低 (設定開啟) | 無 | 低 (清除資料/換啟動器即解) |
| AppLock 類應用 (AppLock, Norton App Lock, Smart AppLock) | 個人隱私保護 | 低 (安裝設密碼) | 無障礙服務/顯示在頂層 | 中 (可被強制停止/清除資料) |
| Digital Wellbeing / 家長控制 (Android 9+ 內建) | 家長管控孩童裝置 | 低 (Google Family Link) | 裝置管理員/家長帳號 | 高 (需家長帳號解鎖) |
| 裝置管理員 / Device Policy Controller (DPC) | 企業 MDM、專用裝置 | 高 (需開發 DPC App) | Device Admin / Device Owner (QR 碼/NFC 佈署) | 極高 (需出廠重置移除) |
| Root + 修改 package-manager / freeze | 極客/測試 | 高 (需 Root) | Root | 極高 (系統級禁用) |
// 1. 開發 DPC App (繼承 DeviceAdminReceiver)
public class MyAdminReceiver extends DeviceAdminReceiver {
@Override public void onEnabled(Context c, Intent i) { /* 已啟用 */ }
@Override public void onDisabled(Context c, Intent i) { /* 已停用 */ }
}
// 2. AndroidManifest.xml
// 3. device_admin_policies.xml
// 4. 佈署:QR 碼/NFC/零觸控註冊為 Device Owner
// 5. 程式碼鎖定套件
DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
ComponentName admin = new ComponentName(this, MyAdminReceiver.class);
dpm.setPackagesSuspended(admin, new String[]{"com.target.app"}, true); // 暫停/禁用
// 或 setApplicationHidden 隱藏圖示
setPackagesSuspended 需 Device Owner 權限。SUSPEND_PACKAGES 系統簽名權限)。