裝置管理員淘汰作業。自 Android 9 (API 級別 28) 起,當裝置管理員叫用時,系統會將部分管理員政策標示為已淘汰。建議您現在就開始為這項異動做好準備。如要瞭解詳情及查看遷移選項,請參閱 淘汰裝置管理員一文。
Android 提供 Android Device Administration API,可支援企業應用程式。Device Administration 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 發布的指南。
裝置管理 API 總覽
以下列舉可能會使用 Device Administration API 的應用程式類型:
- 電子郵件用戶端。
- 執行遠端清除作業的安全性應用程式。
- 裝置管理服務和應用程式。
運作方式
您可以使用 Device Administration API 編寫裝置管理員應用程式,供使用者在裝置上安裝。裝置管理員應用程式會強制執行所需的政策。運作方式如下:
- 系統管理員會編寫裝置管理員應用程式,用於強制執行遠端/本機裝置安全性政策。這些政策可以硬式編碼至應用程式,或是由應用程式動態擷取第三方伺服器的政策。
- 應用程式已安裝在使用者的裝置上。Android 目前沒有自動佈建解決方案。系統管理員可以透過下列方式將應用程式發布給使用者:
- Google Play
- 允許從其他商店安裝。
- 透過其他管道 (例如電子郵件或網站) 發布應用程式。
- 系統會提示使用者啟用裝置管理員應用程式。這項操作的執行方式和時間取決於應用程式的實作方式。
- 使用者啟用裝置管理員應用程式後,就會受到其政策的規範。遵守這些政策通常會帶來好處,例如存取機密系統和資料。
如果使用者未啟用裝置管理員應用程式,該應用程式仍會保留在裝置上,但處於停用狀態。使用者不受政策約束,也無法取得應用程式的任何優勢,例如使用者可能無法同步處理資料。
如果使用者未遵守政策 (例如使用者設定的密碼違反規範),則由應用程式決定如何處理。不過,這通常會導致使用者無法同步處理資料。
如果裝置嘗試連線至需要 Device Administration API 不支援的政策,系統就不會允許連線。Device 管理 API 目前不允許部分佈建。換句話說,如果裝置 (例如舊版裝置) 不支援所有規定的政策,就無法允許裝置連線。
如果裝置包含多個已啟用的管理員應用程式,系統會套用最嚴格的政策。您無法指定特定的管理員應用程式。
如要解除安裝現有的裝置管理員應用程式,使用者必須先以管理員身分取消註冊應用程式。
政策
在企業環境中,員工的裝置通常必須遵守一套嚴格的政策,以便管理裝置使用情形。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 管理 API 也可讓管理員從遠端將裝置恢復原廠設定。這樣一來,萬一裝置遺失或遭竊,資料也不會因此丟失。 |
閒置時間上限 | 設定裝置鎖定螢幕前,從使用者上次觸碰螢幕或按下按鈕開始計算的時間長度。在這種情況下,使用者必須重新輸入 PIN 碼或密碼,才能使用裝置和存取資料。這個值可以是 1 到 60 分鐘。 |
必須加密儲存空間 | 指定儲存空間應加密 (如果裝置支援加密功能)。在 Android 3.0 中推出。 |
停用攝影機 | 指定應停用攝影機。請注意,這項操作不一定會永久停用。系統可根據情境、時間等因素,動態啟用/停用攝影機。這項元素已在 Android 4.0 推出。 |
其他功能
除了支援上表列出的政策之外,裝置管理 API 還可讓您執行下列操作:
- 提示使用者設定新密碼。
- 立即鎖定裝置。
- 清除裝置資料 (也就是將裝置恢復原廠設定)。
範例應用程式
本頁面使用的範例是以裝置管理 API 範例為基礎,該範例包含在 SDK 範例 (可透過 Android SDK Manager 取得) 中,並以 <sdk_root>/ApiDemos/app/src/main/java/com/example/android/apis/app/DeviceAdminSample.java
的形式位於系統中。
範例應用程式提供裝置管理員功能的示範。這個應用程式會向使用者顯示使用者介面,讓他們啟用裝置管理員應用程式。啟用應用程式後,使用者就能使用使用者介面中的按鈕執行下列操作:
- 設定密碼品質。
- 指定使用者密碼的相關規定,例如密碼長度下限、必須包含的數字字元數量等等。
- 設定密碼。如果密碼不符合指定政策,系統會傳回錯誤。
- 設定密碼輸入錯誤次數上限 (一旦超出限制,即抹除裝置內容,即恢復原廠設定)。
- 設定密碼的有效期限。
- 設定密碼記錄長度 (length 是指記錄中儲存的舊密碼數量)。這樣可以防止使用者重複使用先前使用過的 n 個密碼。
- 指定應加密的儲存區域 (如果裝置支援的話)。
- 設定裝置鎖定前可經歷的閒置時間長度上限。
- 讓裝置立即鎖定。
- 清除裝置資料 (即還原原廠設定)。
- 停用相機。
開發裝置管理應用程式
系統管理員可以使用 Device Administration API 編寫會強制執行遠端/本機裝置安全性政策的應用程式。本節將摘要說明建立裝置管理應用程式所需的步驟。
建立資訊清單
如要使用 Device Administration API,應用程式的資訊清單必須包含下列項目:
DeviceAdminReceiver
的子類別,包含以下內容:BIND_DEVICE_ADMIN
權限。- 能夠回應
ACTION_DEVICE_ADMIN_ENABLED
意圖,在資訊清單中以意圖篩選器表示。
- 中繼資料中使用的安全性政策宣告。
以下是裝置管理範例資訊清單的摘錄:
<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
- 實作裝置管理元件的基礎類別。這個類別可方便解讀系統傳送的原始意圖動作。裝置管理應用程式必須包含
DeviceAdminReceiver
子類別。 DevicePolicyManager
- 這個類別可管理在裝置上強制執行的政策。這個類別的大多數用戶端都必須發布使用者目前已啟用的
DeviceAdminReceiver
。DevicePolicyManager
會管理一或多個DeviceAdminReceiver
執行個體的政策 DeviceAdminInfo
- 這個類別可用來指定裝置管理員元件的中繼資料。
這些類別提供功能完善的裝置管理應用程式基礎。本節的其餘部分將說明如何使用 DeviceAdminReceiver
和 DevicePolicyManager
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 所示。
以下是使用者點選「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 個大寫英文字母。以下是微調密碼內容的方法:
setPasswordMinimumLetters()
setPasswordMinimumLowerCase()
setPasswordMinimumUpperCase()
setPasswordMinimumNonLetter()
setPasswordMinimumNumeric()
setPasswordMinimumSymbols()
例如,這段程式碼指出密碼至少要有 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 AppRestrictionEnforcer 和 DeviceOwner 範例會進一步示範如何使用本頁涵蓋的 API。