【问题标题】:How to check if app is on the foreground from Workmanager in BroadcastReceiver?如何从 BroadcastReceiver 中的 Workmanager 检查应用程序是否在前台?
【发布时间】:2021-02-13 19:10:50
【问题描述】:

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

我已经找到了一些与此相关的主题,但不幸的是,自 Android 10 以来限制已更改,这使其变得更加困难。

提前谢谢你

【问题讨论】:

    标签: android kotlin broadcastreceiver


    【解决方案1】:

    你可以试试这样的:

    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)
            ....
        }
    }
    

    【讨论】:

    • 在你的 gradle (app) 中添加: implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
    猜你喜欢
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 2016-09-21
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    相关资源
    最近更新 更多