裝置管理總覽

裝置管理員淘汰資訊:自 Android 9 (API 級別 28) 開始,裝置管理員叫用時,部分管理員政策會標示為已淘汰。建議您立即為這項異動做好準備。如要瞭解詳情並查看遷移選項,請參閱「 裝置管理員淘汰」一文。

Android 提供 Android Device Administration API,支援企業應用程式。Device 管理 API 提供系統層級的裝置管理功能。這些 API 可讓您建立安全性感知應用程式,在企業設定中實用,其中 IT 專業人員需要更全面地控管員工裝置。舉例來說,內建的 Android 電子郵件應用程式利用這些 API 改善 Exchange 支援。透過電子郵件應用程式,Exchange 管理員可以在不同裝置上強制執行密碼政策,包括英數字元密碼或數字 PIN 碼。管理員也可以從遠端清除遺失或遭竊手機的資料 (即還原原廠預設值)。Exchange 使用者可以同步處理電子郵件和日曆資料。

本文件適用於想為 Android 裝置開發企業解決方案的開發人員。我們將探討 Device Administration API 提供的各種功能,為搭載 Android 的員工裝置提供更完善的安全防護。

注意:如要瞭解如何建構 Android for Work 部署作業的工作政策控制器,請參閱「建構裝置政策控制器」。

無頭裝置擁有者模式

Android 14 (API 級別 34) 推出了無頭系統使用者模式 (即 UserManager.isHeadlessSystemUserMode 傳回 true 的裝置)。在無頭系統使用者模式中,系統使用者是背景使用者,需要透過額外的前景使用者進行使用者互動。此外,Android 14 也推出了無頭裝置擁有者關聯模式,除了設定裝置擁有者的系統使用者外,還會將設定檔擁有者新增至所有關聯使用者

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

Android 裝置製造商可參閱 source.android.com 上發布的指南

Device Management API 總覽

以下列舉幾種可能使用 Device Administration API 的應用程式類型:

  • 電子郵件用戶端。
  • 可從遠端清除資料的安全性應用程式。
  • 裝置管理服務和應用程式。

運作方式

您可以使用 Device Administration API 編寫使用者安裝在裝置上的裝置管理員應用程式。裝置管理員應用程式會強制執行所需政策。使用方式:

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

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

如果使用者未能遵守政策 (例如使用者設定違反規範的密碼),應用程式可自行決定如何處理。不過,這通常會導致使用者無法同步處理資料。

如果裝置嘗試連接的伺服器需要 Device Administration API 不支援的政策,系統將不允許連線。Device Administration API 目前不允許部分佈建。換句話說,如果裝置 (例如舊版裝置) 不支援上述所有政策,則無法允許裝置連線。

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

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

政策

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

表 1. Device Administration API 支援的政策。

政策 說明
密碼已啟用 規定裝置必須要求輸入 PIN 碼或密碼。
密碼長度下限 設定密碼長度規定的字元數。舉例來說,您可以規定 PIN 碼或密碼至少要有六個字元。
必須使用英數字元密碼 密碼需要包含字母和數字的組合。可包含符號字元。
需要複雜的密碼 密碼必須包含至少一個英文字母、數字和特殊符號。導入版本: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 Administration API 也可讓管理員從遠端將裝置恢復原廠設定。如此一來,即使裝置遺失或遭竊,資料仍安全無虞。
閒置時間上限 設定自使用者上次輕觸螢幕或按下按鈕後,裝置鎖定螢幕後的時間長度。發生這種情況時,使用者必須再次輸入 PIN 碼或密碼,才能使用裝置和存取資料。這個值可以介於 1 到 60 分鐘之間。
要求儲存空間加密 如果裝置支援儲存區域,指定儲存區域應經過加密。導入版本:Android 3.0。
停用相機 指定應停用相機。請注意,這不一定要是永久停用狀態。相機可以根據環境、時間等因素動態啟用/停用。相關元素已在 Android 4.0 版推出。

其他功能

除了支援上表所列的政策之外,Device Administration 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 Administration API 編寫應用程式,強制強制執行遠端/本機裝置安全性政策。本節概述建立裝置管理應用程式的相關步驟。

建立資訊清單

如要使用 Device Administration 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_ENABLEDDeviceAdminReceiver 子類別必須處理才能管理裝置的主要動作。當使用者啟用裝置管理員應用程式時,此設定會設為接收器。程式碼通常會在 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 Administration API 包含下列類別:

DeviceAdminReceiver
實作裝置管理元件的基本類別。這個類別方便您解讀系統傳送的原始意圖動作。裝置管理應用程式必須包含 DeviceAdminReceiver 子類別。
DevicePolicyManager
用於管理裝置強制執行政策的類別。這個類別的大多數用戶端都必須發布使用者目前啟用的 DeviceAdminReceiverDevicePolicyManager 會管理一或多個 DeviceAdminReceiver 執行個體的政策
DeviceAdminInfo
這個類別可用於指定裝置管理員元件的中繼資料。

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

DeviceAdminReceiver 子類別

如要建立裝置管理員應用程式,您必須將 DeviceAdminReceiver 設為子類別。DeviceAdminReceiver 類別包含一系列回呼,會在特定事件發生時觸發。

在其 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 意圖的動作時,應用程式的啟用程序隨即開始。在範例應用程式中,當使用者按一下「Enable Admin」(啟用管理員) 核取方塊時,就會發生此作業。

當使用者按一下「Enable Admin」(啟用管理員) 核取方塊時,畫面會進行變更,提示使用者啟用裝置管理員應用程式,如圖 2 所示。

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

以下是使用者按一下「啟用管理員」核取方塊時執行的程式碼。這可以觸發 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 會管理一或多個 DeviceAdminReceiver 執行個體的政策。

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

Kotlin

dpm = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager

Java

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

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

設定密碼政策

DevicePolicyManager 包含用於設定及強制執行裝置密碼政策的 API。在 Device Administration 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 Administration API 範例。

其他程式碼範例

Android AppRestrictionEnforcementrDeviceOwner 範例進一步示範如何使用本頁涵蓋的 API。