Приложение с включенным режимом прямой загрузки дает сбой после внедрения WorkManager?

Из-за ограничений фоновой службы мы реализовали наше приложение с помощью WorkManager и заменили AsyncTask. Приложение поддерживает режим прямой загрузки, поэтому мы храним необходимые SharedPreferences в зашифрованном хранилище устройства. Приложение работало нормально до внедрения WorkManager, но теперь происходит сбой после перезагрузки устройства. Логкат:

java.lang.IllegalStateException: SharedPreferences in credential encrypted storage are not available until after user is unlocked
        at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:387)
        at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:372)
        at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:167)
        at androidx.work.impl.utils.Preferences.getSharedPreferences(Unknown Source:12)
        at androidx.work.impl.utils.Preferences.needsReschedule(Unknown Source:0)
                                                setNeedsReschedule
        at androidx.work.impl.utils.ForceStopRunnable.shouldRescheduleWorkers(Unknown Source:6)
        at androidx.work.impl.utils.ForceStopRunnable.run(Unknown Source:18)
        at androidx.work.impl.utils.SerialExecutor$Task.run(Unknown Source:2)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
        at java.lang.Thread.run(Thread.java:764)

Мы предоставляем контекст защищенного хранилища устройства при инициализации WorkManager: ContextCompat.createDeviceProtectedStorageContext(appContext); Пожалуйста, помогите, как с этим справиться.


person PPB    schedule 24.01.2020    source источник


Ответы (1)


Это тот же вопрос, что и - java.lang.IllegalStateException: SharedPreferences в учетных данных зашифрованное хранилище недоступно до тех пор, пока пользователь не будет разблокирован

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

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

См. документацию здесь — https://developer.android.com/training/articles/direct-boot

person Intkhab Ahmed    schedule 27.01.2020
comment
для доступа к общим настройкам я использую только зашифрованное хранилище устройства. Я уверен, что рабочий делает что-то внутри. - person PPB; 27.01.2020