Перейти к содержанию

Часто посещаемые

Недавно просмотренные

navigation

Режим Direct Boot

Android N работает в защищенном режиме Direct Boot, когда устройство было включено, но не разблокировано пользователем. Для поддержки такого режима работы в системе имеется два хранилища данных:

По умолчанию в режиме Direct Boot приложения не работают. Если вашему приложению требуется выполнять какие-то действия в режиме Direct Boot, вы можете зарегистрировать компоненты приложения, которые должны быть запущены в этом режиме. Некоторые распространенные примеры использования приложений, выполняющих операции в режиме Direct Boot:

Если вашему приложению требуется доступ к данным в режиме Direct Boot, используйте шифрованное хранилище устройства. Шифрованное хранилище устройства содержит данные, зашифрованные с помощью ключа, доступного только после успешной подтвержденной загрузки устройства.

Если данные следует шифровать с помощью ключа, связанного с учетными данными пользователя (например, с PIN-кодом или паролем), используйте хранилище, требующее ввода учетных данных. Такое хранилище доступно только после успешной разблокировки устройства пользователем и до тех пор, пока пользователь не перезапустит устройство. Если пользователь включает экран блокировки после разблокировки устройства, шифрованное хранилище, требующее ввода учетных данных, не блокируется.

Запрос доступа для запуска в режиме Direct Boot

Прежде чем работать в режиме Direct Boot или получать доступ к шифрованному хранилищу устройства, приложения должны зарегистрировать свои компоненты в системе. Приложения регистрируются в системе, помечая компоненты как поддерживающие шифрование. Чтобы пометить компонент как поддерживающий шифрование, нужно установить для атрибута android:encryptionAware в манифесте значение true.

Компоненты, поддерживающие шифрование, можно регистрировать для получения LOCKED_BOOT_COMPLETED широковещательных сообщений от системы после перезапуска устройства. В этот момент шифрованное хранилище устройства доступно, и компонент может выполнять необходимые задачи в режиме Direct Boot, например, включать будильник по расписанию.

В следующем фрагменте кода приведен пример регистрации компонента BroadcastReceiver как поддерживающего шифрование и добавления фильтра намерения LOCKED_BOOT_COMPLETED в манифест приложения:

<receiever
  android:encryptionAware="true" >
  ...
  <intent-filter>
    <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
  </intent-filter>
</receiver>

После разблокировки устройства пользователем все компоненты имеют доступ к шифрованному хранилищу устройства и к шифрованному хранилищу, требующему ввода учетных данных.

Доступ к шифрованному хранилищу данных устройства

Для получения доступа к шифрованному хранилищу устройства следует создать второй экземпляр Context посредством вызова Context.createDeviceEncryptedStorageContext(). Все вызовы API системы хранения данных с использованием этого контекста получают доступ к шифрованному хранилищу устройства. В следующем примере показано, как получить доступ к шифрованному хранилищу устройства и открыть существующий файл данных приложения:

Context directBootContext = Context.createDeviceEncryptedStorageContext();
// Access appDataFilename that lives in device encrypted storage
FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
// Use inStream to read content...

Шифрованное хранилище устройства следует использовать только для информации, которая должна быть доступна в режиме Direct Boot. Шифрованное хранилище устройства не следует использовать в качестве шифрованного хранилища общего назначения. Для хранения данных пользователя или шифрованных данных, которые не требуются в режиме Direct Boot, следует использовать шифрованное хранилище, требующее ввода учетных данных.

Уведомление о разблокировке пользователем

Когда после перезагрузки устройства пользователь разблокирует его, ваше приложение может переключиться на шифрованное хранилище, требующее ввода учетных данных, и использовать обычные системные службы, зависящие от учетных данных пользователя.

Чтобы приложение получало уведомления о разблокировке устройства пользователем после перезагрузки, необходимо зарегистрировать BroadcastReceiver работающего компонента для отслеживания сообщения ACTION_USER_UNLOCKED. Также приложение может получать существующее сообщение ACTION_BOOT_COMPLETED, которое теперь указывает, что устройство загружено и разблокировано пользователем.

Приложение может направлять запрос напрямую, если пользователь разблокирует устройство посредством вызова UserManager.isUserUnlocked().

Перенос имеющихся данных

Если пользователь обновит свое устройство для использования режима Direct Boot, вашему приложению может потребоваться перенести имеющиеся данные в шифрованное хранилище устройства. Используйте Context.migrateSharedPreferencesFrom() и Context.migrateDatabaseFrom() для переноса данных о настройках и содержимого баз данных между шифрованным хранилищем, требующим ввода учетных данных, и шифрованным хранилищем устройства.

Хорошо обдумайте, какие данные следует перенести из шифрованного хранилища, требующего ввода учетных данных, в шифрованное хранилище устройства. Не следует переносить в шифрованное хранилище устройства личные данные пользователя, такие как пароли или токены авторизации. В некоторых случаях вашему приложению может потребоваться работать с отдельными наборами данных в двух шифрованных хранилищах.

Тестирование приложения с поддержкой шифрования

Протестируйте свое приложение с поддержкой шифрования в новом режиме Direct Boot. Существуют два способа включить режим Direct Boot.

Внимание! При включении режима Direct Boot с устройства удаляются все данные пользователя.

Чтобы включить режим Direct Boot на поддерживаемых устройствах с Android N, выполните одну из следующих последовательностей действий.

Если вам требуется переключать режимы на тестовых устройствах, вы можете использовать эмуляцию режима Direct Boot. Режим эмуляции следует использовать только для целей разработки, в нем возможна потеря данных. Чтобы включить эмуляцию режима Direct Boot, установите режим блокировки устройства, выберите пункт "No thanks", если система предлагает открыть защищенный экран запуска при установке режима блокировки, а затем используйте следующую команду оболочки adb:

$ adb shell sm set-emulate-fbe true

Для отключения эмуляции режима Direct Boot нужно использовать следующую команду:

$ adb shell sm set-emulate-fbe false

При использовании этих команд устройство перезагружается.

На этом сайте используются файлы cookie. Они нужны, чтобы сохранять ваши языковые настройки и параметры отображения страниц.

Хотите следить за новостями о разработке для Android и получать советы по созданию приложений для Google Play? Подпишитесь на нашу рассылку!

*Поля, обязательные для заполнения

Подписка оформлена.

Следите за новостями от Google Developers в WeChat

Изменить язык контента на этом сайте на ?

Вы хотите перевести страницу на , но в ваших языковых настройках для этого сайта указан другой язык ().

Изменить язык контента на ? Вернуться к прежнему языку или выбрать другой можно будет в меню внизу любой страницы.

Для этого класса требуется API уровня  и выше

Этот документ скрыт, так как для него и другой документации выбран API уровня . Изменить настройки можно над меню слева.

Узнать о том, какой уровень API следует указывать для своего приложения, можно здесь.

Take a short survey?
Help us improve the Android developer experience. (April 2018 — Developer Survey)