设备管理弃用。从 Android 9(API 级别 28)开始,当某项设备管理调用某些管理政策时,系统会将它们标记为“已弃用”。我们建议您立即着手准备应对此项变更。如需了解详情并查看迁移选项,请参阅设备管理员弃用。
Android 通过提供 Android Device 管理 API。Device Admin API 可为设备提供 在系统级设置管理功能借助这些 API 这种注重安全性的应用,在企业环境中十分有用,而 IT 部门 专业人员需要对员工设备进行大量控制。例如,内置的 Android 电子邮件应用利用这些 API 改善了对 Exchange 的支持。Exchange 管理员可以通过电子邮件应用 强制执行密码政策 - 包括字母数字密码或数字密码 跨设备 PIN 码管理员还可以远程清除(即 恢复出厂默认设置)。Exchange 用户可以同步他们的电子邮件和日历数据。
本文档适用于想要针对搭载 Android 的设备开发企业解决方案的开发者。其中介绍了 由 Device 管理 API 提供,以提供更强大的安全保护, 搭载 Android 的员工设备。
注意:如需了解如何针对 Android for Work 部署构建工作政策控制器,请参阅构建设备政策控制器。
无头设备所有者模式
Android 14(API 级别 34)引入了无头系统用户模式(其中 UserManager.isHeadlessSystemUserMode
会返回 true
的设备)。在无头系统用户模式下,系统用户是后台用户,需要依赖其他前台用户进行最终用户互动。Android 14 还引入了
无头设备所有者关联模式
这会将一个配置文件所有者
关联用户
设置设备所有者的系统用户除外。
在配置了无头系统用户(即系统用户
在后台运行),仅限全局范围内的设备政策
(适用于所有用户的政策)会应用于前台用户
或用户。如需了解详情,请参阅 addUserRestriction
。
Android 设备制造商可以参阅 指南 发布在 source.android.com 上
Device Administration API 概览
下面的示例展示了可能使用 Device Administration API 的应用类型:
- 电子邮件客户端。
- 执行远程清除的安全应用。
- 设备管理服务和应用。
工作原理
您可以使用 Device Administration API 来编写用户在其设备上安装的设备管理应用。设备管理应用会强制执行所需的 政策。具体方法如下:
- 系统管理员会编写一个能够强制执行远程/本地设备安全政策的设备管理应用。这些政策可以硬编码到应用中,或者应用可以从第三方服务器动态获取这些政策。
- 该应用已安装在用户的设备上。Android 目前没有自动配置解决方案。系统管理员向用户分发应用的一些方式如下:
- Google Play。
- 从其他商店启用安装。
- 通过其他方式分发应用,例如电子邮件或网站。
- 系统会提示用户启用设备管理应用。方法 具体发生时间取决于应用的实现方式。
- 用户启用该设备管理应用后,便要受到其政策的约束。遵守这些政策通常可带来诸多优势,例如访问敏感系统和数据。
如果用户未启用设备管理应用,则该应用会保留在设备上,但处于不活动状态。用户将不会受到其政策的约束,相反也不会获得该应用的任何优势(例如,他们可能无法同步数据)。
如果用户未能遵守这些政策(例如,如果用户设置的密码违反了准则),则由应用来决定如何进行处理。不过,这通常会导致用户无法同步数据。
如果设备尝试连接到某个服务器,而该服务器需要 Device Administration API 不支持的政策,则系统将不允许建立此类连接。Device Administration API 目前不支持部分配置。换言之,如果设备(例如旧设备) 并非支持所有既定政策,也就无法允许 设备进行连接。
如果设备包含多个已启用的管理应用,则最严格的政策为 强制执行。无法仅执行某个特定管理应用的政策。
要卸载现有的设备管理应用,用户需要执行以下操作: 首先,以管理员身份取消注册该应用。
政策
在企业环境中,员工设备通常必须遵守一系列规范设备使用的严格政策。Device Administration API 支持表 1 中列出的政策。请注意,Device 管理 API 目前仅支持用于屏幕的密码 锁定:
表 1. Device Administration 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 Administration API 还允许管理员将设备远程重置为出厂默认设置。这可以在设备丢失或被盗的情况下保护用户数据。 |
最长不活动时间锁定 | 设置自用户上次轻触屏幕或 在设备锁定屏幕之前按了某个按钮。发生这种情况时,用户需要再次输入其 PIN 码或密码,然后才能使用设备和访问数据。该值可介于 1 到 60 分钟之间。 |
需要存储加密 | 指定应对存储区域进行加密(如果设备支持)。在 Android 3.0 中引入。 |
停用摄像头 | 指定应停用相机。请注意,这不一定是永久停用。摄像头可以动态启用/停用 根据情境、时间等因素调整应用。在 Android 4.0 中引入。 |
其他功能
除了支持上表中列出的政策外,Device Administration API 还支持您执行以下操作:
- 提示用户设置新密码。
- 立即锁定设备。
- 清除设备的数据(也就是将设备恢复到出厂默认设置)。
示例应用
本页中使用的示例基于 Device Administration API 示例,该示例包含在 SDK 示例(可通过 Android SDK 管理器获取)中,并且位于您的系统上:<sdk_root>/ApiDemos/app/src/main/java/com/example/android/apis/app/DeviceAdminSample.java
。
该示例应用演示了设备管理功能。它为用户提供了一个界面,让用户可以启用设备管理应用。用户启用该应用后,便可以使用界面上的按钮执行以下操作:
- 设置密码质量。
- 指明对用户密码的要求,例如最小长度、最小数量 必须包含的数字字符等等。
- 设置密码。如果密码不符合指定的 政策时,系统会返回错误。
- 设置在擦除设备之前可以尝试密码失败的次数 (即恢复出厂设置)。
- 设置从现在起密码多久会过期。
- 设置密码历史记录长度(长度是指历史记录中存储的旧密码数量)。 这样可以防止用户重复使用最近使用过的 n 个密码之一。
- 指定应对存储区域进行加密(如果设备支持)。
- 设置设备锁定前可处于不活动状态的时间上限。
- 立即锁定设备。
- 清除设备的数据(即恢复出厂设置)。
- 停用相机。

图 1. 示例应用的屏幕截图
开发设备管理应用
系统管理员可以使用 Device Administration API 来编写一个能够强制执行远程/本地设备安全政策的应用。此部分 总结了创建设备管理应用所涉及的步骤 应用。
创建清单
要使用 Device 管理 API,应用的 清单中必须包含以下内容:
- 包含以下内容的
DeviceAdminReceiver
的子类:BIND_DEVICE_ADMIN
权限。- 能够响应
ACTION_DEVICE_ADMIN_ENABLED
intent,在清单中表示为 intent 过滤器。
- 元数据中使用的安全政策声明。
以下代码摘录自设备管理示例清单:
<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"
指的是 activity 的用户可读标签。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 Administration API 包含以下类:
DeviceAdminReceiver
- 用于实现设备管理组件的基类。这个类提供了
以便于解释由 Android SDK 发送的原始 intent 操作,
系统。设备管理应用必须包含
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
的操作
intent。在
当用户点击启用
管理员复选框。
当用户点击 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
可管理 1 个应用的政策
一个或多个 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 个大写字母。下面显示了对密码内容进行微调的方法:
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()
来限制
能够重复使用旧密码此方法采用长度参数,该参数可指定存储的旧密码数量。启用此政策后,用户将无法输入与最近使用的 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。