Прекращение поддержки Device Admin. Начиная с Android 9 (уровень API 28) некоторые правила администрирования будут помечаться как устаревшие, если их вызывает администратор устройства. Рекомендуем начать подготовку к этому изменению уже сейчас. Подробнее о прекращении поддержки администратора устройства и вариантах переноса…
Android поддерживает корпоративные приложения, предлагая Android Device Administration API. Device Administration API предоставляет функции администрирования устройств на системном уровне. Эти API позволяют создавать приложения, обеспечивающие безопасность, которые полезны в корпоративных средах, где ИТ-специалистам требуется расширенный контроль над устройствами сотрудников. Например, встроенное почтовое приложение 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 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, манифест приложения должен включать следующее:
- Подкласс
DeviceAdminReceiver, который включает следующее:- Разрешение
BIND_DEVICE_ADMIN. - Возможность отвечать на интент
ACTION_DEVICE_ADMIN_ENABLED, выраженный в манифесте как фильтр интентов.
- Разрешение
- Декларация правил безопасности, используемых в метаданных.
Ниже приведен фрагмент манифеста из примера Device Administration:
<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 Administration API включает следующие классы:
DeviceAdminReceiver- Базовый класс для реализации компонента администрирования устройства. Этот класс позволяет интерпретировать необработанные действия intent, отправленные системой. Приложение для администрирования устройств должно включать подкласс
DeviceAdminReceiver. DevicePolicyManager- Класс для управления правилами, применяемыми на устройстве. Большинство клиентов этого класса должны опубликовать
DeviceAdminReceiver, который пользователь включил.DevicePolicyManagerуправляет правилами для одного или нескольких экземпляровDeviceAdminReceiver. DeviceAdminInfo- Этот класс используется для указания метаданных компонента администратора устройства.
Эти классы являются основой для полнофункционального приложения для администрирования устройств. В оставшейся части этого раздела описывается, как использовать API DeviceAdminReceiver и DevicePolicyManager для написания приложения для администрирования устройств.
Создание подкласса 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. Пример приложения: активация приложения
Ниже приведен код, который выполняется, когда пользователь устанавливает флажок 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() Обратите внимание, что метод isAdminActive() объекта DevicePolicyManager принимает в качестве аргумента компонент 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 заглавных букв. Вот как можно настроить содержимое пароля:
setPasswordMinimumLetters()setPasswordMinimumLowerCase()setPasswordMinimumUpperCase()setPasswordMinimumNonLetter()setPasswordMinimumNumeric()setPasswordMinimumSymbols()
Например, этот фрагмент указывает, что пароль должен содержать не менее двух заглавных букв:
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(), которое заставляет пользователей менять пароли по истечении заданного времени.
Например, этот фрагмент запрещает пользователям повторно использовать любой из последних пяти паролей:
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, описанных на этой странице.