Режим Direct Boot и доступ к базе данных
Как получить доступ к базе данных (SQLite или ROOM), когда смартфон находится в режиме Direct Boot? Моя цель - заново включить все активные будильники (взяв их данные из БД) после перезагрузки, не дожидаясь разблокирования смартфона пользователем.
Документация(Режим Direct Boot) показывает доступ к данным на примере SharedPreferences и лишь мельком упоминаются базы данных.
Официальный пример (GitHub) так же строится вокруг SharedPreferences. Нагуглить что-то, что помогло бы решить мою проблему не вышло - информации почти нет.
Может кто-то сталкивался с такой задачей?
Ответы (1 шт):
Direct Boot по сути означает, что данные приложения теперь можно хранить в 2-х ипостасях:
- Credential Encrypted Storage (CES) - традиционное место хранения данных приложения, где то в
/data/data/[package]/- данные зашифрованы с использованием логина юзера - Device Encrypted Storage (DES) - место хранения данных, где данные зашифрованы с использованием данных самого устройства
Исходя из этого вам надо поместить свою БД SQLite/ROOM в DES хранилище и тогда и только тогда ее данные будут доступны в режиме Direct Boot.
Context cesContext = context.getApplicationContext(); //обычный CES контекст
Context desContext = ContextCompat.createDeviceProtectedStorageContext(cesContext); //DES контекст, доступный в Direct Boot
Вам надо положить свою БД не в cesContext как обычно, а в desContext, тогда он будет доступен в режиме Direct Boot