裝置管理總覽

裝置管理員淘汰作業。自 Android 9 (API 級別 28) 開始,裝置管理員叫用部分管理政策時,系統會將這些政策標示為已淘汰。建議您現在就開始為這項異動做準備。如要瞭解詳情及查看遷移選項,請參閱「 裝置管理員淘汰」。

Android 提供 Android 裝置管理 API,支援企業應用程式。裝置管理 API 提供系統層級的裝置管理功能。這些 API 可讓您建立適用於企業環境的安全性感知應用程式,IT 專業人員可透過這些應用程式,全面控管員工裝置。舉例來說,內建的 Android 電子郵件應用程式已運用這些 API,提升 Exchange 支援。透過「郵件」應用程式,Exchange 管理員可以在裝置上強制執行密碼政策,包括英數字元密碼或數字 PIN 碼。管理員也可以從遠端清除遺失或遭竊手機的資料 (即將手機恢復原廠設定)。Exchange 使用者可以同步處理電子郵件和日曆資料。

本文適用於想為 Android 裝置開發企業解決方案的開發人員。本文將探討裝置管理 API 提供的各種功能,協助您為 Android 員工裝置提供更強大的安全性。

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

無螢幕裝置擁有者模式

Android 14 (API 級別 34) 推出無頭系統使用者模式 (裝置中的 UserManager.isHeadlessSystemUserMode 會傳回 true)。在無頭系統使用者模式中,系統使用者是背景使用者,且依賴其他前景使用者進行使用者互動。Android 14 也推出無頭裝置擁有者關聯模式,可為裝置擁有者設定的系統使用者以外的所有關聯使用者新增設定檔擁有者。

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

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

裝置管理 API 總覽

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

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

運作方式

您可以使用裝置管理 API 編寫裝置管理應用程式,供使用者安裝在裝置上。裝置管理員應用程式會強制執行所需政策。運作方式如下:

  • 系統管理員會編寫裝置管理員應用程式,強制執行遠端/本機裝置安全性政策。這些政策可能已硬式編碼至應用程式中,也可能由應用程式從第三方伺服器動態擷取。
  • 應用程式已安裝在使用者裝置上。Android 目前沒有自動佈建解決方案。系統管理員可透過下列方式將應用程式發布給使用者:
    • Google Play
    • 啟用從其他商店安裝的功能。
    • 透過其他方式發布應用程式,例如電子郵件或網站。
  • 系統會提示使用者啟用裝置管理員應用程式。提示方式和時間取決於應用程式的實作方式。
  • 使用者啟用裝置管理員應用程式後,就必須遵守該應用程式的政策。遵守這些政策通常可享有福利,例如存取機密系統和資料。

如果使用者未啟用裝置管理員應用程式,該應用程式仍會保留在裝置上,但處於非使用中狀態。使用者不會受到該應用程式政策的約束,反過來說,也無法享有應用程式的任何優點,例如可能無法同步處理資料。

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

如果裝置嘗試連線至需要政策的伺服器,但裝置管理 API 不支援這些政策,系統就不會允許連線。Device Administration API 目前不支援部分佈建。換句話說,如果裝置 (例如舊版裝置) 不支援所有列出的政策,就無法允許裝置連線。

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

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

政策

在企業環境中,員工裝置通常必須遵守嚴格的政策,以控管裝置的使用方式。裝置管理 API 支援表 1 列出的政策。請注意,裝置管理 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 中導入。
密碼輸入錯誤次數上限 指定使用者輸入錯誤密碼的次數上限,一旦超出限制,裝置就會清除資料。管理員也可以透過裝置管理 API,從遠端將裝置恢復原廠設定。萬一裝置遺失或遭竊,資料也不會因此丟失。
鎖定前的閒置時間上限 設定裝置鎖定螢幕前,使用者最後一次觸控螢幕或按下按鈕的時間長度。發生這種情況時,使用者必須重新輸入 PIN 碼或密碼,才能使用裝置及存取資料。這個值可介於 1 和 60 分鐘之間。
要求儲存空間加密 指定儲存空間是否應加密 (如果裝置支援)。 Android 3.0 中導入。
停用攝影機 指定攝影機應停用。請注意,這不一定是永久停用。攝影機可根據情境、時間等動態啟用/停用。Android 4.0 推出這項功能。

其他功能

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

  • 提示使用者設定新密碼。
  • 立即鎖定裝置。
  • 清除裝置資料 (也就是將裝置恢復原廠預設設定)。

範例應用程式

本頁面使用的範例是以裝置管理 API 範例為基礎,該範例包含在 SDK 範例中 (可透過 Android SDK 管理工具取得),並位於系統的 <sdk_root>/ApiDemos/app/src/main/java/com/example/android/apis/app/DeviceAdminSample.java

範例應用程式會示範裝置管理功能,向使用者顯示使用者介面,讓他們啟用裝置管理員應用程式。啟用應用程式後,使用者就能透過使用者介面中的按鈕執行下列操作:

  • 設定密碼強度。
  • 指定使用者密碼的規定,例如長度下限、必須包含的數字字元數下限等。
  • 設定密碼。如果密碼不符合指定政策,系統會傳回錯誤。
  • 設定密碼輸入錯誤次數上限,一旦超出限制,裝置資料即會遭到清除 (也就是恢復原廠設定)。
  • 設定密碼的有效期限 (從現在起算)。
  • 設定密碼記錄長度 (length 是指記錄中儲存的舊密碼數量)。 這樣一來,使用者就無法重複使用先前用過的最後 n 個密碼。
  • 如果裝置支援,請指定儲存空間應加密。
  • 設定裝置鎖定前可經過的最長閒置時間。
  • 立即鎖定裝置。
  • 清除裝置資料 (即恢復原廠設定)。
  • 停用攝影機。

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

開發裝置管理應用程式

系統管理員可以使用裝置管理 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 開發人員指南

導入程式碼

裝置管理 API 包含下列類別:

DeviceAdminReceiver
實作裝置管理元件的基礎類別。這個類別可方便您解讀系統傳送的原始意圖動作。您的裝置管理應用程式必須包含 DeviceAdminReceiver 子類別。
DevicePolicyManager
這個類別用於管理裝置上強制執行的政策。這個類別的大部分用戶端都必須發布 DeviceAdminReceiver,且使用者目前已啟用該 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」(啟用管理員) 核取方塊時,就會發生這種情況。

使用者勾選「啟用管理員」核取方塊後,畫面會變更,提示使用者啟用裝置管理員應用程式,如圖 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 管理一或多個 DeviceAdminReceiver 執行個體的政策。

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

Kotlin

dpm = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager

Java

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

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

設定密碼政策

DevicePolicyManager 包含設定及強制執行裝置密碼政策的 API。在裝置管理 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);

如需如何啟用儲存空間加密功能的完整範例,請參閱裝置管理 API 範例。

其他程式碼範例

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