如何在BroadcastReceiver中使用WorkManager检查应用是否在前台?

3

有没有一种方法可以在BroadcastReceiver中通过Workmanager检查应用程序是否在后台、关闭或运行?当应用程序关闭或在后台时,我想显示内部通知。

我已经找到了一些相关的主题,但不幸的是,自Android 10以来限制发生了变化,这使得它有点困难。

提前致谢。

1个回答

5
你可以尝试类似这样的操作:
  1. 保存当前应用程序状态
class MyApplication : Application(), LifecycleObserver {

    private val sharedPreferences by lazy {
        PreferenceManager.getDefaultSharedPreferences(this)
    }

    override fun onCreate() {
        super.onCreate()
        ProcessLifecycleOwner.get().lifecycle.addObserver(this)
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    fun onAppBackgrounded() {
        sharedPreferences.edit(commit = true) { putString("isAppOnForeground", false) }
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun onAppForegrounded() {
        sharedPreferences.edit(commit = true) { putString("isAppOnForeground", true) }
    }
}
  1. 获取您工作中的当前状态
class YourWorker constructor(
    private val context: Context,
    private val workParams: WorkerParameters
) : CoroutineWorker(context, workParams) {

    private val sharedPreferences by lazy {
        PreferenceManager.getDefaultSharedPreferences(context)
    }

    override suspend fun doWork(): Result {
        val isAppOnForeground = sharedPreferences.getBoolean("isAppOnForeground", false)
        ....
    }
}

1
在您的gradle(app)中添加: implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" - Juan Fraga

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接