【发布时间】:2021-02-13 19:10:50
【问题描述】:
有没有办法检查应用程序是否在后台、关闭或从 BroadcastReceiver 中的 Workmanager 运行? 我想在应用关闭或在后台显示内部通知。
我已经找到了一些与此相关的主题,但不幸的是,自 Android 10 以来限制已更改,这使其变得更加困难。
提前谢谢你
【问题讨论】:
标签: android kotlin broadcastreceiver
有没有办法检查应用程序是否在后台、关闭或从 BroadcastReceiver 中的 Workmanager 运行? 我想在应用关闭或在后台显示内部通知。
我已经找到了一些与此相关的主题,但不幸的是,自 Android 10 以来限制已更改,这使其变得更加困难。
提前谢谢你
【问题讨论】:
标签: android kotlin broadcastreceiver
你可以试试这样的:
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) }
}
}
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)
....
}
}
【讨论】: