如何从 BroadcastReceiver 中的 Workmanager 检查应用程序是否位于前台?

Kar*_*lad 3 android broadcastreceiver kotlin

有没有办法检查应用程序是否在后台、关闭或从 BroadcastReceiver 内的 Workmanager 运行?我想在应用程序关闭或在后台时显示内部通知。

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

先感谢您

小智 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) }
    }
}
Run Code Online (Sandbox Code Playgroud)
  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)
        ....
    }
}
Run Code Online (Sandbox Code Playgroud)