裝置管理總覽

裝置管理員淘汰。從 Android 9 開始 (API 級別 28),系統會在何時將部分管理員政策標示為已淘汰 由裝置管理員叫用。建議您立即開始為這項異動做好準備。學習 更多遷移選項,請參閱 裝置管理員淘汰

Android 提供的是企業應用程式 Android Device 管理 API。Device 管理 API 提供裝置 管理功能您可以透過這些 API 可輔助企業設定的安全感知應用程式, 專業人士需要能夠充分控管員工的裝置。舉例來說, 內建的 Android 電子郵件應用程式運用這些 API 改進了 Exchange 支援。透過電子郵件應用程式,Exchange 管理員可以 強制執行密碼政策,包含英數字元或數字 PIN 碼:跨裝置的 PIN 碼。管理員也可以從遠端清除資料 ) 遺失或遭竊的手機恢復原廠設定。Exchange 使用者可以同步處理 使用者的電子郵件和日曆資料。

本文件適用對象為想開發企業的開發人員 適用於 Android 裝置的解決方案探討各項功能 為裝置使用者 搭載 Android 的員工裝置。

注意事項:建立工作政策的相關資訊 Android for Work 部署作業控制器,請參閱 建構裝置政策控制器

無頭裝置擁有者模式

Android 14 (API 級別 34) 導入了無頭系統使用者模式 (搭載 哪一個? UserManager.isHeadlessSystemUserMode敬上 會傳回 true)。在無使用者介面的系統使用者模式下,系統使用者會 背景使用者,並仰賴額外的前景使用者 互動。Android 14 還推出了 無頭裝置擁有者關聯模式, 這樣系統就會向所有使用者 關聯使用者

使用無頭系統使用者 (即系統使用者) 設定的裝置 在背景執行),只有全域範圍內的裝置政策 (適用於所有使用者的政策) 會套用至前景使用者 或使用者詳情請見 addUserRestriction敬上 。

Android 裝置製造商可提供 指南 發布在 source.android.com 上

Device Management API 總覽

以下列舉可能使用 Device 管理 API 的應用程式類型:

  • 電子郵件用戶端。
  • 提供遠端清除功能的安全性應用程式。
  • 裝置管理服務和應用程式。

運作方式

您使用 Device 管理 API 編寫使用者的裝置管理員應用程式 安裝在裝置上安裝。裝置管理員應用程式會強制執行所需的設定 再檢查有關聯的允許政策運作方式如下:

  • 系統管理員編寫的裝置管理員應用程式,強制執行 遠端/本機裝置安全性政策。這些政策可能會以硬式編碼的方式寫入 應用程式也可以從第三方動態擷取政策 伺服器
  • 應用程式已安裝在使用者裝置。Android 目前還沒有自動化的佈建解決方案。例如系統管理員可能採取的措施 向使用者發布應用程式的步驟如下:
    • Google Play
    • 允許從其他商店安裝。
    • 透過其他方式 (例如電子郵件或網站) 發布應用程式。
  • 系統會提示使用者啟用裝置管理員應用程式。做法 啟動時間取決於應用程式實作方式
  • 使用者啟用裝置管理員應用程式後, 政策。遵守這些政策通常帶來益處,例如 控管敏感系統和資料的存取權

如果使用者未啟用裝置管理員應用程式,該應用程式仍會在裝置上保留,但會處於閒置狀態。使用者不受政策約束,也無法取得應用程式的任何優勢,例如使用者可能無法同步處理資料。

如果使用者未遵守政策規定 (例如使用者設定了 密碼違反規範時,應用程式可自行決定 如何處理這種情況然而,這通常會導致使用者 能夠同步處理資料

如果裝置嘗試連線至需要政策的伺服器 Device 管理 API 支援的連線 。Device 管理 API 目前不允許 佈建工作也就是說,如果裝置 (例如舊版裝置) 執行了 系統不支援所有所述的政策,您將無法允許 進行連線。

如果裝置已啟用多個管理應用程式,則最嚴格的政策為 強制執行。您無法指定特定管理員 應用程式。

如要解除安裝現有的裝置管理員應用程式,使用者必須 請先將應用程式取消註冊為管理員。

政策

在企業環境中,員工裝置通常必須 遵守一套嚴格的裝置使用規範政策。 Device 管理 API 支援表 1 中列出的政策。 請注意,Device Administration API 目前僅支援在螢幕中顯示密碼 鎖定:

表 1. Device 管理 API 支援的政策。

政策 說明
已啟用密碼 裝置必須要求你輸入 PIN 碼或密碼。
密碼長度下限 設定密碼的字元數規定。舉例來說, 的 PIN 碼或密碼至少要有 6 個字元。
必須輸入英數字元密碼 須有密碼 是由字母和數字組成可能包含符號字元。
必須提供複雜密碼 密碼必須包含至少一個英文字母、數字和特殊符號。這項元素已在 Android 3.0 版中推出。
密碼中的字母字元數下限 所有管理員或特定一位管理員的密碼。這項元素已在 Android 3.0 版中推出。
密碼最少要有小寫英文字母 小寫數量下限 所有管理員或特定一位管理員的密碼。這項元素已在 Android 3.0 版中推出。
密碼中的字元數下限為非字母字元 所有管理員或特定管理員的密碼都必須使用非字母的字元。這項元素已在 Android 3.0 版中推出。
密碼中的數字下限為必填 所有管理員或特定管理員的密碼數量下限。這項元素已在 Android 3.0 版中推出。
密碼必須包含最少符號 所有管理員或特定管理員的密碼數量下限。這項元素已在 Android 3.0 版中推出。
密碼中的大寫字母字元數下限 所有管理員或特定管理員的密碼中,最少必須使用大寫字母。這項元素已在 Android 3.0 版中推出。
密碼過期時間 密碼過期後,以毫秒為單位 (從裝置管理員設定到期逾時時間算起)。這項元素已在 Android 3.0 版中推出。
密碼記錄限制 這項政策會禁止使用者重複使用最後 n 個不重複的密碼。 這項政策通常會與 setPasswordExpirationTimeout(),會強制 使用者在指定時間過後更新密碼。 這項元素已在 Android 3.0 版中推出。
密碼輸入錯誤次數上限 指定使用者可以在 就會抹除相關資料。Device 管理 API 也可讓管理員 從遠端將裝置恢復原廠設定。這麼做可保護資料安全, 裝置遺失或遭竊。
閒置時間鎖定上限 設定自使用者上次輕觸螢幕起經過的時間 在裝置鎖定螢幕前按下按鈕。發生這種情況時 使用者必須輸入 PIN 碼或密碼才能開始使用裝置,並 存取資料。這個值可以是 1 到 60 分鐘。
必須加密儲存空間 指定如果裝置支援儲存區域,必須加密該區域。 這項元素已在 Android 3.0 版中推出。
停用攝影機 指定應停用相機。請注意,由於這不包括 才會永久停用相機能以動態方式啟用/停用 所以可以根據背景資訊、時間等條件調整廣告相關元素已在 Android 4.0 版中推出。

其他功能

除了支援上表所列的政策外,「裝置」 管理 API 可讓您執行下列操作:

  • 提示使用者設定新密碼。
  • 立即鎖定裝置。
  • 抹除裝置資料 (即將裝置還原至原廠預設值)。

範例應用程式

本網頁使用的範例是以 Device Administration API 為基礎 樣本,包含在 SDK 範例中 (可透過 Android SDK Manager),而且位置在您的系統中 <sdk_root>/ApiDemos/app/src/main/java/com/example/android/apis/app/DeviceAdminSample.java

範例應用程式提供裝置管理員功能的示範。可以向使用者顯示 使用者介面,可讓使用者啟用裝置管理員應用程式。一次 啟用應用程式後,就能使用使用者介面中的按鈕 :

  • 設定密碼品質。
  • 指定使用者的密碼規定,例如長度下限、 都必須包含的字元,以此類推。
  • 設定密碼。如果密碼不符合 系統會傳回錯誤
  • 設定密碼輸入錯誤次數上限 (一旦超出限制,裝置資料即會遭到清除) (還原為原廠設定)。
  • 設定密碼的有效期限,
  • 設定密碼記錄長度 (「長度」是指儲存在記錄中的舊密碼數量)。 這可避免使用者重複使用 是他們最後使用的 n 個密碼之一。
  • 指定應加密的儲存區域 (如果裝置支援的話)。
  • 設定裝置可經歷的閒置時間上限 鎖定功能。
  • 立即將裝置鎖定。
  • 清除裝置資料 (即還原原廠設定)。
  • 停用相機。

圖 1. 範例應用程式的螢幕截圖

開發裝置管理應用程式

系統管理員可使用 Device 管理 API 編寫應用程式 強制執行遠端/本機裝置安全性政策。這個區段 摘要列出建立裝置管理的步驟 應用程式。

建立資訊清單

如要使用 Device 管理 API,應用程式的 資訊清單必須包含下列項目:

以下是「裝置管理」範例資訊清單的摘錄:

<activity android:name=".app.DeviceAdminSample"
            android:label="@string/activity_sample_device_admin">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.SAMPLE_CODE" />
    </intent-filter>
</activity>
<receiver android:name=".app.DeviceAdminSample$DeviceAdminSampleReceiver"
        android:label="@string/sample_device_admin"
        android:description="@string/sample_device_admin_description"
        android:permission="android.permission.BIND_DEVICE_ADMIN">
    <meta-data android:name="android.app.device_admin"
            android:resource="@xml/device_admin_sample" />
    <intent-filter>
        <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
    </intent-filter>
</receiver>

請注意:

  • 下列屬性參照範例應用程式所在的字串資源 ApiDemos/res/values/strings.xml。如要進一步瞭解資源,請參閱 應用程式資源
    • android:label="@string/activity_sample_device_admin" 是指 使用者能夠理解的活動標籤。
    • android:label="@string/sample_device_admin" 是指 使用者能理解的權限標籤。
    • android:description="@string/sample_device_admin_description" 是指 使用者可理解的權限說明。說明通常較長,而且較長 資訊 標籤。
  • android:permission="android.permission.BIND_DEVICE_ADMIN" DeviceAdminReceiver 子類別必須的權限 必須確保只有系統能與接收器互動 (沒有任何應用程式獲得此權限)。這個 防止其他應用程式濫用裝置管理員應用程式。
  • android.app.action.DEVICE_ADMIN_ENABLED」是主要項目 DeviceAdminReceiver 子類別必須處理的動作 管理裝置的權限。如果使用者啟用 登入裝置。您的程式碼通常會在 onEnabled()。如要獲得支援,接收端也必須 需要 BIND_DEVICE_ADMIN 權限,其他應用程式才能運作 並無法濫用
  • 使用者啟用裝置管理員應用程式時,接收端 具備執行動作的權限,以回應特定系統的廣播 事件。出現適當的事件時,應用程式可以強制執行政策。適用對象 舉例來說,如果使用者嘗試設定的新密碼不符合政策 應用程式可以提示使用者選擇其他密碼 符合相關規定
  • 發布應用程式後,請避免變更接收器名稱。如果 資訊清單變更,因此當使用者更新應用程式時,裝置管理員會遭到停用。詳情請參閱: <receiver>
  • android:resource="@xml/device_admin_sample" 宣告中繼資料使用的安全性政策。中繼資料會提供 裝置管理員的專屬資訊 (由 DeviceAdminInfo 類別剖析)。以下是 device_admin_sample.xml:
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
  <uses-policies>
    <limit-password />
    <watch-login />
    <reset-password />
    <force-lock />
    <wipe-data />
    <expire-password />
    <encrypted-storage />
    <disable-camera />
  </uses-policies>
</device-admin>

在設計裝置管理應用程式時,您不需要 只包含與應用程式相關的所有政策。

如要進一步瞭解資訊清單檔案,請參閱 Android 開發人員指南

實作程式碼

Device 管理 API 包含下列類別:

DeviceAdminReceiver
實作裝置管理元件的基礎類別。這個類別提供 方便解讀由 Pod 傳送 有些人會將 Cloud Storage 視為檔案系統 但實際上不是「裝置管理」應用程式必須包含 DeviceAdminReceiver 子類別。
DevicePolicyManager
這個類別可管理在裝置上強制執行的政策。大多數的用戶端 這個類別必須發布使用者的 DeviceAdminReceiver 目前已啟用DevicePolicyManager 管理以下項目的政策: 一或多個 DeviceAdminReceiver 執行個體
DeviceAdminInfo
這個類別可用來指定中繼資料 則適用於裝置管理員元件

這些類別是功能完善的裝置管理應用程式的基礎。 本節的其餘部分將說明如何使用 DeviceAdminReceiver 和 用於編寫裝置管理員應用程式的 DevicePolicyManager API。

將 DeviceAdminReceiver 設為子類別

如要建立裝置管理員應用程式,您必須設為子類別 DeviceAdminReceiverDeviceAdminReceiver 類別 包含一系列回呼 。

在其 DeviceAdminReceiver 子類別中,範例應用程式 只會顯示 Toast 通知以回應 事件。例如:

Kotlin

class DeviceAdminSample : DeviceAdminReceiver() {

    private fun showToast(context: Context, msg: String) {
        context.getString(R.string.admin_receiver_status, msg).let { status ->
            Toast.makeText(context, status, Toast.LENGTH_SHORT).show()
        }
    }

    override fun onEnabled(context: Context, intent: Intent) =
            showToast(context, context.getString(R.string.admin_receiver_status_enabled))

    override fun onDisableRequested(context: Context, intent: Intent): CharSequence =
            context.getString(R.string.admin_receiver_status_disable_warning)

    override fun onDisabled(context: Context, intent: Intent) =
            showToast(context, context.getString(R.string.admin_receiver_status_disabled))

    override fun onPasswordChanged(context: Context, intent: Intent, userHandle: UserHandle) =
            showToast(context, context.getString(R.string.admin_receiver_status_pw_changed))
...
}

Java

public class DeviceAdminSample extends DeviceAdminReceiver {

    void showToast(Context context, String msg) {
        String status = context.getString(R.string.admin_receiver_status, msg);
        Toast.makeText(context, status, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onEnabled(Context context, Intent intent) {
        showToast(context, context.getString(R.string.admin_receiver_status_enabled));
    }

    @Override
    public CharSequence onDisableRequested(Context context, Intent intent) {
        return context.getString(R.string.admin_receiver_status_disable_warning);
    }

    @Override
    public void onDisabled(Context context, Intent intent) {
        showToast(context, context.getString(R.string.admin_receiver_status_disabled));
    }

    @Override
    public void onPasswordChanged(Context context, Intent intent, UserHandle userHandle) {
        showToast(context, context.getString(R.string.admin_receiver_status_pw_changed));
    }
...
}

啟用應用程式

裝置管理員應用程式必須處理的重大事件之一 啟用應用程式使用者必須明確啟用應用程式 要強制執行的政策如果使用者選擇不啟用應用程式 仍會顯示在裝置上,但系統不會強制執行政策,使用者也無法 享受應用程式的所有優勢

啟用應用程式的程序是從使用者執行 觸發 ACTION_ADD_DEVICE_ADMIN 的動作 意圖。在 應用程式範例,這種情況會在使用者按一下 [啟用] 管理員核取方塊。

當使用者按一下 [啟用管理員] 核取方塊後,畫面上就會顯示 變更提示,提示使用者啟用裝置管理員應用程式,如圖所示 2.

圖 2. 範例應用程式:啟用應用程式

下方是使用者勾選 [Enable Admin] (啟用管理員) 核取方塊時執行的程式碼。進而觸發 onPreferenceChange() 回呼。當使用者變更此 Preference 的值並即將設定和/或保留時,系統就會叫用此回呼。如果使用者啟用應用程式,螢幕就會顯示 變更提示,提示使用者啟用裝置管理員應用程式,如圖所示 2.否則,裝置管理員應用程式會遭到停用。

Kotlin

override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean {
    if (super.onPreferenceChange(preference, newValue)) return true
    val value = newValue as Boolean
    if (preference == enableCheckbox) {
        if (value != adminActive) {
            if (value) {
                // Launch the activity to have the user enable our admin.
                val intent = Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN).apply {
                    putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, deviceAdminSample)
                    putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
                            activity.getString(R.string.add_admin_extra_app_text))
                }
                startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN)
                // return false - don't update checkbox until we're really active
                return false
            } else {
                dpm.removeActiveAdmin(deviceAdminSample)
                enableDeviceCapabilitiesArea(false)
                adminActive = false
            }
        }
    } else if (preference == disableCameraCheckbox) {
        dpm.setCameraDisabled(deviceAdminSample, value)
    }
    return true
}

Java

@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
    if (super.onPreferenceChange(preference, newValue)) {
        return true;
    }
    boolean value = (Boolean) newValue;
    if (preference == enableCheckbox) {
        if (value != adminActive) {
            if (value) {
                // Launch the activity to have the user enable our admin.
                Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
                intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, deviceAdminSample);
                intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
                        activity.getString(R.string.add_admin_extra_app_text));
                startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN);
                // return false - don't update checkbox until we're really active
                return false;
            } else {
                dpm.removeActiveAdmin(deviceAdminSample);
                enableDeviceCapabilitiesArea(false);
                adminActive = false;
            }
        }
    } else if (preference == disableCameraCheckbox) {
        dpm.setCameraDisabled(deviceAdminSample, value);
    }
    return true;
}

線條 intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample) 表示 mDeviceAdminSample (這是 DeviceAdminReceiver 元件) 是目標政策。 這行程式碼會叫用圖 2 顯示的使用者介面,可引導使用者完成各項程序 將裝置管理員新增至系統 (或允許他們拒絕)。

應用程式需要執行根據 裝置管理員應用程式正在啟用,系統會確認應用程式 有效。方法是使用 DevicePolicyManager 方法 isAdminActive()。請注意,DevicePolicyManager isAdminActive() 方法採用 DeviceAdminReceiver 做為引數:

Kotlin

private lateinit var dpm: DevicePolicyManager
...
private fun isActiveAdmin(): Boolean = dpm.isAdminActive(deviceAdminSample)

Java

DevicePolicyManager dpm;
...
private boolean isActiveAdmin() {
    return dpm.isAdminActive(deviceAdminSample);
}

管理政策

DevicePolicyManager」是管理政策的公開課程 是在裝置上強制執行的。DevicePolicyManager 管理 1 項政策 或多個 DeviceAdminReceiver 執行個體

您可以取得 DevicePolicyManager 的控制代碼,如下所示:

Kotlin

dpm = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager

Java

DevicePolicyManager dpm =
    (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);

本節說明如何使用 DevicePolicyManager 執行 行政工作:

設定密碼政策

DevicePolicyManager 包含用於設定和強制執行 裝置密碼政策。在 Device 管理 API 中,密碼只會套用到 螢幕鎖定本節說明常見的密碼相關工作。

設定裝置密碼

這個程式碼會顯示使用者介面,提示使用者設定密碼:

Kotlin

Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD).also { intent ->
    startActivity(intent)
}

Java

Intent intent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD);
startActivity(intent);
設定密碼品質

密碼品質可以是下列其中一個 DevicePolicyManager 常數:

PASSWORD_QUALITY_ALPHABETIC
使用者必須輸入 密碼包含至少字母 (或其他符號) 字元。
PASSWORD_QUALITY_ALPHANUMERIC
使用者必須輸入 密碼包含至少「同時」數字「和」字母 (或 其他符號)。
PASSWORD_QUALITY_NUMERIC
使用者必須輸入密碼 至少含有數字字元
PASSWORD_QUALITY_COMPLEX
使用者 必須輸入至少包含一個字母、數字和數字的密碼 特殊符號
PASSWORD_QUALITY_SOMETHING
政策要求 但不在意它是什麼東西
PASSWORD_QUALITY_UNSPECIFIED
這項政策沒有設定密碼的規定。

舉例來說,您可以將密碼政策設為要求使用英數字元的密碼:

Kotlin

private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
...
dpm.setPasswordQuality(deviceAdminSample, DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC)

Java

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
...
dpm.setPasswordQuality(deviceAdminSample, DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC);
設定密碼內容規定

從 Android 3.0 開始,DevicePolicyManager 類別 包括可讓您調整密碼內容的方法。適用對象 例如,您可以設定政策,規定密碼必須至少包含 n 個大寫字母。您可以運用下列方法 內容:

例如,以下程式碼片段指出密碼至少必須包含 2 個大寫字母:

Kotlin

private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val pwMinUppercase = 2
...
dpm.setPasswordMinimumUpperCase(deviceAdminSample, pwMinUppercase)

Java

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
int pwMinUppercase = 2;
...
dpm.setPasswordMinimumUpperCase(deviceAdminSample, pwMinUppercase);
設定密碼長度下限

您可以指定密碼必須至少達到指定下限 長度。例如:

Kotlin

private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val pwLength: Int = ...
...
dpm.setPasswordMinimumLength(deviceAdminSample, pwLength)

Java

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
int pwLength;
...
dpm.setPasswordMinimumLength(deviceAdminSample, pwLength);
設定密碼輸入錯誤次數上限

您可以設定密碼輸入錯誤次數上限 抹除裝置資料 (也就是將裝置恢復原廠設定)。例如:

Kotlin

val dPM:DevicePolicyManager
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val maxFailedPw: Int = ...
...
dpm.setMaximumFailedPasswordsForWipe(deviceAdminSample, maxFailedPw)

Java

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
int maxFailedPw;
 ...
dpm.setMaximumFailedPasswordsForWipe(deviceAdminSample, maxFailedPw);
設定密碼到期逾時

從 Android 3.0 開始,您可以使用 setPasswordExpirationTimeout() 方法設定密碼到期時間。以裝置管理員設定到期逾時時間起算,以毫秒為單位表示差異。例如:

Kotlin

private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val pwExpiration: Long = ...
...
dpm.setPasswordExpirationTimeout(deviceAdminSample, pwExpiration)

Java

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
long pwExpiration;
...
dpm.setPasswordExpirationTimeout(deviceAdminSample, pwExpiration);
根據歷史記錄限制密碼

從 Android 3.0 開始,您可以使用 setPasswordHistoryLength() 限制使用者 重複使用舊密碼這個方法需要 length 參數,用來指定 。啟用這項政策後,使用者就無法輸入新 符合最後 n 個密碼的密碼。這麼做可以避免 避免重複使用相同密碼通常使用這項政策 相輔相成 setPasswordExpirationTimeout(), 這會強制使用者 在指定的時間過後更新密碼。

舉例來說,以下程式碼片段禁止使用者重複使用最後 5 個密碼:

Kotlin

private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val pwHistoryLength = 5
...
dpm.setPasswordHistoryLength(deviceAdminSample, pwHistoryLength)

Java

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
int pwHistoryLength = 5;
...
dpm.setPasswordHistoryLength(deviceAdminSample, pwHistoryLength);

設定裝置鎖定功能

您可以設定最長閒置時間上限 裝置鎖定功能例如:

Kotlin

private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val timeMs: Long = 1000L * timeout.text.toString().toLong()
...
dpm.setMaximumTimeToLock(deviceAdminSample, timeMs)

Java

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
...
long timeMs = 1000L*Long.parseLong(timeout.getText().toString());
dpm.setMaximumTimeToLock(deviceAdminSample, timeMs);

您也可以透過程式輔助方式,立即讓裝置鎖定:

Kotlin

private lateinit var dpm: DevicePolicyManager
dpm.lockNow()

Java

DevicePolicyManager dpm;
dpm.lockNow();

執行資料抹除作業

您可以使用 DevicePolicyManager 方法 wipeData():將裝置恢復原廠設定。這很實用 裝置遺失或遭竊。清除裝置資料通常是 是否符合某些條件舉例來說,您可以使用 setMaximumFailedPasswordsForWipe() 表示裝置應 密碼輸入錯誤達到一定次數後即會抹除。

您可以按照下列步驟抹除資料:

Kotlin

private lateinit var dpm: DevicePolicyManager
dpm.wipeData(0)

Java

DevicePolicyManager dpm;
dpm.wipeData(0);

wipeData() 方法 額外選項位元遮罩。目前的值必須為 0。

停用攝影機

從 Android 4.0 開始,你可以停用相機。請注意,這不一定要永久停用。您可以根據情境、時間等因素動態啟用/停用攝影機。

你可以使用 setCameraDisabled() 方法。例如,這個程式碼片段會根據核取方塊設定,將攝影機設為啟用或停用:

Kotlin

private lateinit var disableCameraCheckbox: CheckBoxPreference
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
...
dpm.setCameraDisabled(deviceAdminSample, mDisableCameraCheckbox.isChecked)

Java

private CheckBoxPreference disableCameraCheckbox;
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
...
dpm.setCameraDisabled(deviceAdminSample, mDisableCameraCheckbox.isChecked());

儲存空間加密

從 Android 3.0 開始,您可以使用 setStorageEncryption() 方法,藉此設定需要加密儲存區域的政策 (如支援)。

例如:

Kotlin

private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
...
dpm.setStorageEncryption(deviceAdminSample, true)

Java

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
...
dpm.setStorageEncryption(deviceAdminSample, true);

如需啟用儲存空間加密的完整範例,請參閱 Device 管理 API 範例。

其他程式碼範例

Android AppRestrictionEnforcerDeviceOwner 範例,進一步示範如何使用本頁提及的 API。