Устаревание администратора устройства . Начиная с 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 , который добавляет Profile Owner ко всем аффилированным пользователям, кроме системного пользователя, для которого установлен Device Owner.
В устройствах, настроенных с пользователем headless system (где системный пользователь работает в фоновом режиме), только политики устройства, которые являются глобальными по области действия (политики, которые применимы ко всем пользователям), применяются к пользователю или пользователям переднего плана. Подробности см. в addUserRestriction
.
Производители устройств Android могут обратиться к руководству , опубликованному на сайте source.android.com.
Обзор API администрирования устройств
Вот примеры типов приложений, которые могут использовать API администрирования устройств:
- Почтовые клиенты.
- Приложения безопасности, которые выполняют удаленное стирание данных.
- Службы и приложения управления устройствами.
Как это работает?
Вы используете API администрирования устройств для написания приложений администратора устройств, которые пользователи устанавливают на своих устройствах. Приложение администратора устройств применяет желаемые политики. Вот как это работает:
- Системный администратор пишет приложение администратора устройства, которое обеспечивает выполнение политик безопасности удаленных/локальных устройств. Эти политики могут быть жестко закодированы в приложении, или приложение может динамически извлекать политики со стороннего сервера.
- Приложение устанавливается на устройства пользователей. В настоящее время Android не имеет автоматизированного решения по предоставлению. Некоторые способы, которыми системный администратор может распространять приложение среди пользователей, следующие:
- Гугл Плей.
- Включение установки из другого магазина.
- Распространение приложения другими способами, например, по электронной почте или через веб-сайты.
- Система предлагает пользователю включить приложение администратора устройства. Как и когда это произойдет, зависит от того, как реализовано приложение.
- Как только пользователи включают приложение администратора устройства, они подчиняются его политикам. Соблюдение этих политик обычно дает преимущества, такие как доступ к конфиденциальным системам и данным.
Если пользователи не включают приложение администратора устройства, оно остается на устройстве, но в неактивном состоянии. Пользователи не будут подчиняться его политикам, и они, наоборот, не получат никаких преимуществ приложения — например, они не смогут синхронизировать данные.
Если пользователь не соблюдает политики (например, если пользователь устанавливает пароль, который нарушает правила), то решение о том, как с этим справиться, остается за приложением. Однако обычно это приводит к тому, что пользователь не может синхронизировать данные.
Если устройство попытается подключиться к серверу, который требует политик, не поддерживаемых в 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
, выраженное в манифесте как фильтр намерений.
- Разрешение
- Декларация политик безопасности, используемых в метаданных.
Вот отрывок из примера манифеста 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 .Реализация кода
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
. В примере приложения это происходит, когда пользователь нажимает флажок Enable Admin .
Когда пользователь устанавливает флажок «Включить администратора» , на дисплее появляется запрос на активацию приложения администратора устройства, как показано на рисунке 2.

Рисунок 2. Пример приложения: активация приложения
Ниже приведен код, который выполняется, когда пользователь устанавливает флажок Enable Admin . Это приводит к запуску обратного вызова 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, описанных на этой странице.