Fortnightly Tech Info - 20190510
Android
Detect App in Background or Foreground
LifecycleObserver
will do the work.
class AppVisibilityObserver(private val doOnForeground: () -> Any, private val doOnBackground: () -> Any) : LifecycleObserver {
init {
ProcessLifecycleOwner.get()
.lifecycle
.addObserver(this)
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onForeground() {
doOnForeground()
Log.d("AppVisibilityObserver", "App running in foreground")
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun onBackground() {
doOnBackground()
Log.d("AppVisibilityObserver", "App going to background")
}
}
In old days, we did:
class YourApplication : Application() {
override fun onCreate() {
super.onCreate()
registerActivityLifecycleCallbacks(AppLifecycleTracker())
}
}
class AppLifecycleTracker : Application.ActivityLifecycleCallbacks {
private var numStarted = 0
override fun onActivityStarted(activity: Activity?) {
if (numStarted == 0) {
// app went to foreground
}
numStarted++
}
override fun onActivityStopped(activity: Activity?) {
numStarted--
if (numStarted == 0) {
// app went to background
}
}
}