Устаревание функций администратора устройства . Начиная с Android 9 (уровень API 28), некоторые политики администратора будут помечаться как устаревшие при вызове администратором устройства. Рекомендуем начать подготовку к этому изменению уже сейчас. Чтобы узнать больше и ознакомиться с вариантами перехода, ознакомьтесь с разделом «Устаревание функций администратора устройства» .
Android поддерживает корпоративные приложения благодаря API администрирования устройств Android. API администрирования устройств предоставляет функции администрирования устройств на системном уровне. Эти API позволяют создавать безопасные приложения, полезные в корпоративных условиях, где ИТ-специалистам требуется полный контроль над устройствами сотрудников. Например, встроенное приложение электронной почты Android использует эти API для улучшения поддержки Exchange. С помощью приложения электронной почты администраторы Exchange могут применять политики паролей, включая буквенно-цифровые пароли или цифровые PIN-коды, на всех устройствах. Администраторы также могут удалённо стирать данные (то есть восстанавливать заводские настройки) на утерянных или украденных устройствах. Пользователи Exchange могут синхронизировать данные своей электронной почты и календаря.
Этот документ предназначен для разработчиков, желающих создавать корпоративные решения для устройств на базе Android. В нём рассматриваются различные функции API администрирования устройств, обеспечивающие более высокий уровень безопасности устройств сотрудников на базе Android.
Примечание . Информацию о создании контроллера рабочей политики для развертываний Android for Work см. в разделе Создание контроллера политики устройства .
Режим владельца безголового устройства
В Android 14 (уровень API 34) представлен режим Headless System User (устройства, в которых UserManager.isHeadlessSystemUserMode
возвращает true
). В режиме Headless System User системный пользователь работает в фоновом режиме и взаимодействует с другими активными пользователями. В Android 14 также представлен режим Headless Device Owner Affiliated Mode (режим владельца устройства без интерфейса) , который добавляет владельца профиля ко всем аффилированным пользователям, кроме системного пользователя, для которого установлен владелец устройства.
На устройствах, настроенных с использованием безэкранного системного пользователя (где системный пользователь работает в фоновом режиме), к пользователю или пользователям, находящимся в активном режиме, применяются только глобальные политики устройства (политики, применимые ко всем пользователям). Подробнее см. в описании addUserRestriction
.
Производители устройств Android могут обратиться к руководству , опубликованному на source.android.com.
Обзор API администрирования устройств
Вот примеры типов приложений, которые могут использовать API администрирования устройств:
- Почтовые клиенты.
- Приложения безопасности, которые выполняют удаленное стирание данных.
- Службы и приложения управления устройствами.
Как это работает?
API администрирования устройств используется для создания приложений для администрирования устройств, которые пользователи устанавливают на свои устройства. Приложение для администрирования устройств применяет необходимые политики. Вот как это работает:
- Системный администратор пишет приложение для администрирования устройств, которое применяет политики безопасности удалённо/локально. Эти политики могут быть жёстко прописаны в приложении или приложение может динамически получать их со стороннего сервера.
- Приложение устанавливается на устройства пользователей. В настоящее время для Android нет решения для автоматизированной подготовки. Системный администратор может распространить приложение среди пользователей следующими способами:
- Google Play.
- Включение установки из другого магазина.
- Распространение приложения другими способами, например, по электронной почте или через веб-сайты.
- Система предлагает пользователю включить приложение администратора устройства. То, как и когда это произойдет, зависит от реализации приложения.
- После включения приложения администратора устройства пользователи подчиняются его политикам. Соблюдение этих политик обычно даёт ряд преимуществ, таких как доступ к конфиденциальным системам и данным.
Если пользователи не активируют приложение администратора устройства, оно останется на устройстве, но в неактивном состоянии. Его политики не будут распространяться на пользователей, и, соответственно, они не смогут воспользоваться его преимуществами, например, синхронизировать данные.
Если пользователь не соблюдает правила (например, устанавливает пароль, нарушающий правила), приложение само решает, как поступить. Однако обычно это приводит к тому, что пользователь не может синхронизировать данные.
Если устройство попытается подключиться к серверу, требующему политик, не поддерживаемых в API администрирования устройств, подключение будет отклонено. В настоящее время API администрирования устройств не поддерживает частичную подготовку. Другими словами, если устройство (например, устаревшее) не поддерживает все заявленные политики, подключиться к нему невозможно.
Если на устройстве включено несколько приложений администратора, применяется самая строгая политика. Выделить конкретное приложение администратора невозможно.
Чтобы удалить существующее приложение администратора устройства, пользователям необходимо сначала отменить регистрацию приложения в качестве администратора.
Политики
В корпоративной среде устройства сотрудников часто должны соответствовать строгим правилам использования. API администрирования устройств поддерживает правила, перечисленные в таблице 1. Обратите внимание, что в настоящее время API администрирования устройств поддерживает только пароли для блокировки экрана:
Таблица 1. Политики, поддерживаемые 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 Manager) и находится в вашей системе как <sdk_root>/ApiDemos/app/src/main/java/com/example/android/apis/app/DeviceAdminSample.java
.
В этом примере приложения представлена демонстрация функций администрирования устройства. Пользователям предоставляется пользовательский интерфейс, позволяющий включить приложение администрирования устройства. После включения приложения можно использовать кнопки в пользовательском интерфейсе для выполнения следующих действий:
- Установите качество пароля.
- Укажите требования к паролю пользователя, такие как минимальная длина, минимальное количество цифровых символов, которые он должен содержать, и т. д.
- Установите пароль. Если пароль не соответствует заданным политикам, система вернёт ошибку.
- Установите количество неудачных попыток ввода пароля, после которого данные на устройстве будут стерты (т. е. восстановлены до заводских настроек).
- Укажите, через сколько времени пароль станет недействительным.
- Установите длину истории паролей ( длина — это количество старых паролей, сохранённых в истории). Это предотвращает повторное использование пользователями одного из последних n паролей, которые они использовали ранее.
- Укажите, что область хранения должна быть зашифрована, если устройство это поддерживает.
- Установите максимальное время бездействия, по истечении которого устройство будет заблокировано.
- Немедленно заблокируйте устройство.
- Удалите данные устройства (т.е. восстановите заводские настройки).
- Отключите камеру.

Рисунок 1. Скриншот примера приложения
Разработка приложения для администрирования устройств
Системные администраторы могут использовать API администрирования устройств для создания приложения, обеспечивающего применение политик безопасности на удалённых и локальных устройствах. В этом разделе кратко описаны этапы создания приложения для администрирования устройств.
Создание манифеста
Чтобы использовать 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 .Реализация кода
API администрирования устройств включает следующие классы:
-
DeviceAdminReceiver
- Базовый класс для реализации компонента администрирования устройств. Этот класс обеспечивает удобство интерпретации необработанных действий намерений, отправляемых системой. Ваше приложение для администрирования устройств должно включать подкласс
DeviceAdminReceiver
. -
DevicePolicyManager
- Класс для управления политиками, применяемыми на устройстве. Большинство клиентов этого класса должны иметь опубликованный объект
DeviceAdminReceiver
, который пользователь в данный момент включил.DevicePolicyManager
управляет политиками для одного или нескольких экземпляровDeviceAdminReceiver
-
DeviceAdminInfo
- Этот класс используется для указания метаданных для компонента администратора устройства.
Эти классы составляют основу для полнофункционального приложения для администрирования устройств. Далее в этом разделе описывается, как использовать API DeviceAdminReceiver
и DevicePolicyManager
для написания приложения для администрирования устройств.
Подкласс DeviceAdminReceiver
Чтобы создать приложение для администрирования устройства, необходимо создать подкласс DeviceAdminReceiver
. Класс DeviceAdminReceiver
состоит из серии обратных вызовов, которые срабатывают при возникновении определённых событий.
В подклассе DeviceAdminReceiver
пример приложения просто отображает Toast
уведомление в ответ на определённые события. Например:
Котлин
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)) ... }
Ява
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
. В примере приложения это происходит, когда пользователь устанавливает флажок «Включить администратора» .
Когда пользователь устанавливает флажок «Включить администратора» , на дисплее появляется запрос на активацию приложения администратора устройства, как показано на рисунке 2.

Рисунок 2. Пример приложения: активация приложения
Ниже представлен код, который выполняется, когда пользователь устанавливает флажок «Включить администратора» . Это приводит к запуску обратного вызова onPreferenceChange()
. Этот обратный вызов срабатывает, когда значение этого Preference
было изменено пользователем и должно быть установлено и/или сохранено. Если пользователь включает приложение, отображаемое изображение изменяется, предлагая пользователю активировать приложение администратора устройства, как показано на рисунке 2. В противном случае приложение администратора устройства отключается.
Котлин
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 }
Ява
@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
:
Котлин
private lateinit var dpm: DevicePolicyManager ... private fun isActiveAdmin(): Boolean = dpm.isAdminActive(deviceAdminSample)
Ява
DevicePolicyManager dpm; ... private boolean isActiveAdmin() { return dpm.isAdminActive(deviceAdminSample); }
Управление политиками
DevicePolicyManager
— это открытый класс для управления политиками, применяемыми на устройстве. DevicePolicyManager
управляет политиками для одного или нескольких экземпляров DeviceAdminReceiver
.
Получить доступ к DevicePolicyManager
можно следующим образом:
Котлин
dpm = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager
Ява
DevicePolicyManager dpm = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
В этом разделе описывается, как использовать DevicePolicyManager
для выполнения административных задач:
Установить политику паролей
DevicePolicyManager
включает API для настройки и применения политики паролей устройств. В API администрирования устройств пароль применяется только к блокировке экрана. В этом разделе описываются распространённые задачи, связанные с паролями.
Установите пароль для устройства
Этот код отображает пользовательский интерфейс, предлагающий пользователю установить пароль:
Котлин
Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD).also { intent -> startActivity(intent) }
Ява
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
- Политика не предъявляет требований к паролю.
Например, вот как можно настроить политику паролей, требующую буквенно-цифровой пароль:
Котлин
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName ... dpm.setPasswordQuality(deviceAdminSample, DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC)
Ява
DevicePolicyManager dpm; ComponentName deviceAdminSample; ... dpm.setPasswordQuality(deviceAdminSample, DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC);
Установить требования к содержанию пароля
Начиная с Android 3.0, класс DevicePolicyManager
включает методы, позволяющие точно настраивать содержимое пароля. Например, можно установить политику, согласно которой пароль должен содержать не менее n заглавных букв. Вот методы для точной настройки содержимого пароля:
-
setPasswordMinimumLetters()
-
setPasswordMinimumLowerCase()
-
setPasswordMinimumUpperCase()
-
setPasswordMinimumNonLetter()
-
setPasswordMinimumNumeric()
-
setPasswordMinimumSymbols()
Например, в этом фрагменте говорится, что пароль должен содержать как минимум 2 заглавные буквы:
Котлин
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName private val pwMinUppercase = 2 ... dpm.setPasswordMinimumUpperCase(deviceAdminSample, pwMinUppercase)
Ява
DevicePolicyManager dpm; ComponentName deviceAdminSample; int pwMinUppercase = 2; ... dpm.setPasswordMinimumUpperCase(deviceAdminSample, pwMinUppercase);
Установите минимальную длину пароля
Вы можете указать, что длина пароля должна быть не меньше указанной минимальной. Например:
Котлин
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName private val pwLength: Int = ... ... dpm.setPasswordMinimumLength(deviceAdminSample, pwLength)
Ява
DevicePolicyManager dpm; ComponentName deviceAdminSample; int pwLength; ... dpm.setPasswordMinimumLength(deviceAdminSample, pwLength);
Установить максимальное количество неудачных попыток ввода пароля
Вы можете установить максимальное количество неудачных попыток ввода пароля, после которого данные на устройстве будут удалены (т.е. сброшены до заводских настроек). Например:
Котлин
val dPM:DevicePolicyManager private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName private val maxFailedPw: Int = ... ... dpm.setMaximumFailedPasswordsForWipe(deviceAdminSample, maxFailedPw)
Ява
DevicePolicyManager dpm; ComponentName deviceAdminSample; int maxFailedPw; ... dpm.setMaximumFailedPasswordsForWipe(deviceAdminSample, maxFailedPw);
Установить срок действия пароля
Начиная с Android 3.0, вы можете использовать метод setPasswordExpirationTimeout()
для установки срока действия пароля, выраженного в виде разницы в миллисекундах с момента, когда администратор устройства установил время истечения срока действия. Например:
Котлин
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName private val pwExpiration: Long = ... ... dpm.setPasswordExpirationTimeout(deviceAdminSample, pwExpiration)
Ява
DevicePolicyManager dpm; ComponentName deviceAdminSample; long pwExpiration; ... dpm.setPasswordExpirationTimeout(deviceAdminSample, pwExpiration);
Ограничить пароль на основе истории
Начиная с Android 3.0, можно использовать метод setPasswordHistoryLength()
, чтобы ограничить возможность пользователей повторно использовать старые пароли. Этот метод принимает параметр длины , который определяет количество хранимых старых паролей. Когда эта политика активна, пользователи не могут ввести новый пароль, совпадающий с последними n паролями. Это предотвращает повторное использование одного и того же пароля. Эта политика обычно используется вместе с setPasswordExpirationTimeout()
, который заставляет пользователей обновлять свои пароли по истечении заданного времени.
Например, этот фрагмент запрещает пользователям повторно использовать любой из последних 5 паролей:
Котлин
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName private val pwHistoryLength = 5 ... dpm.setPasswordHistoryLength(deviceAdminSample, pwHistoryLength)
Ява
DevicePolicyManager dpm; ComponentName deviceAdminSample; int pwHistoryLength = 5; ... dpm.setPasswordHistoryLength(deviceAdminSample, pwHistoryLength);
Установить блокировку устройства
Вы можете установить максимальный период бездействия пользователя, по истечении которого устройство будет заблокировано. Например:
Котлин
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName private val timeMs: Long = 1000L * timeout.text.toString().toLong() ... dpm.setMaximumTimeToLock(deviceAdminSample, timeMs)
Ява
DevicePolicyManager dpm; ComponentName deviceAdminSample; ... long timeMs = 1000L*Long.parseLong(timeout.getText().toString()); dpm.setMaximumTimeToLock(deviceAdminSample, timeMs);
Вы также можете программно приказать устройству немедленно заблокироваться:
Котлин
private lateinit var dpm: DevicePolicyManager dpm.lockNow()
Ява
DevicePolicyManager dpm; dpm.lockNow();
Выполнить очистку данных
Вы можете использовать метод DevicePolicyManager
wipeData()
для сброса устройства к заводским настройкам. Это полезно в случае утери или кражи устройства. Часто решение об очистке устройства принимается при выполнении определённых условий. Например, можно использовать setMaximumFailedPasswordsForWipe()
чтобы указать, что устройство должно быть очищено после определённого количества неудачных попыток ввода пароля.
Удаление данных производится следующим образом:
Котлин
private lateinit var dpm: DevicePolicyManager dpm.wipeData(0)
Ява
DevicePolicyManager dpm; dpm.wipeData(0);
Метод wipeData()
принимает в качестве параметра битовую маску дополнительных параметров. В настоящее время значение должно быть равно 0.
Отключить камеру
Начиная с Android 4.0, вы можете отключить камеру. Обратите внимание, что это не обязательно должно быть перманентное отключение. Камеру можно включать/выключать динамически в зависимости от контекста, времени и т. д.
Вы управляете отключением камеры с помощью метода setCameraDisabled()
. Например, этот фрагмент кода включает или отключает камеру в зависимости от установки флажка:
Котлин
private lateinit var disableCameraCheckbox: CheckBoxPreference private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName ... dpm.setCameraDisabled(deviceAdminSample, mDisableCameraCheckbox.isChecked)
Ява
private CheckBoxPreference disableCameraCheckbox; DevicePolicyManager dpm; ComponentName deviceAdminSample; ... dpm.setCameraDisabled(deviceAdminSample, mDisableCameraCheckbox.isChecked());
Шифрование хранилища
Начиная с Android 3.0, вы можете использовать метод setStorageEncryption()
для установки политики, требующей шифрования области хранения, если это поддерживается.
Например:
Котлин
private lateinit var dpm: DevicePolicyManager private lateinit var deviceAdminSample: ComponentName ... dpm.setStorageEncryption(deviceAdminSample, true)
Ява
DevicePolicyManager dpm; ComponentName deviceAdminSample; ... dpm.setStorageEncryption(deviceAdminSample, true);
Полный пример включения шифрования хранилища см. в примере API администрирования устройств.
Дополнительные примеры кода
Примеры Android AppRestrictionEnforcer и DeviceOwner дополнительно демонстрируют использование API, рассматриваемых на этой странице.