启用了直接启动模式的应用程序在实现WorkManager后崩溃了?

问题描述 投票:0回答:1

由于后台服务的限制,我们在WorkManager的帮助下实现了我们的应用,并替换了AsyncTask。该应用程序支持直接启动模式,因此我们将所需的SharedPreferences存储在设备加密存储中。在实施WorkManager之前,应用程序运行正常,但现在在重新启动设备后崩溃。logcat:

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); 请帮助,如何处理。

android sharedpreferences android-workmanager android-storage
1个回答
0
投票

这是与-java.lang.IllegalStateException: SharedPreferences in credential encrypted storage are not available until after user is unlocked相同的问题

如果看到堆栈跟踪,则表明共享首选项是经过凭据加密的,这意味着只有在用户解锁设备并且您提供的上下文用于设备加密存储后,sharedpreferences才起作用。

要解决此问题,您需要使用设备加密的存储而不是凭据加密的存储。

请参阅此处的文档-https://developer.android.com/training/articles/direct-boot

© www.soinside.com 2019 - 2024. All rights reserved.