Esto puede lograr esto de una manera eficiente utilizando Application.ActivityLifecycleCallbacks
Por ejemplo, tomemos el nombre de la clase de actividad como ProfileActivity permite encontrar si está en primer plano o en segundo plano
primero tenemos que crear nuestra clase de aplicación ampliando la clase de aplicación
que implementa
Application.ActivityLifecycleCallbacks
Seamos mi clase de aplicación de la siguiente manera
Clase de aplicación
public class AppController extends Application implements Application.ActivityLifecycleCallbacks {
private boolean activityInForeground;
@Override
public void onCreate() {
super.onCreate();
//register ActivityLifecycleCallbacks
registerActivityLifecycleCallbacks(this);
}
public static boolean isActivityVisible() {
return activityVisible;
}
public static void activityResumed() {
activityVisible = true;
}
public static void activityPaused() {
activityVisible = false;
}
private static boolean activityVisible;
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
//Here you can add all Activity class you need to check whether its on screen or not
activityInForeground = activity instanceof ProfileActivity;
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
public boolean isActivityInForeground() {
return activityInForeground;
}
}
en la clase anterior hay un método de anulación enActivityResumed de ActivityLifecycleCallbacks
@Override
public void onActivityResumed(Activity activity) {
//Here you can add all Activity class you need to check whether its on screen or not
activityInForeground = activity instanceof ProfileActivity;
}
donde se pueden encontrar todas las instancias de actividad que se muestran actualmente en la pantalla, simplemente verifique si su actividad está en la pantalla o no mediante el método anterior.
Registre su clase de aplicación en manifest.xml
<application
android:name=".AppController" />
Para verificar el clima, la actividad está en primer plano o en segundo plano según la solución anterior, llame al siguiente método en los lugares que necesita verificar
AppController applicationControl = (AppController) getApplicationContext();
if(applicationControl.isActivityInForeground()){
Log.d("TAG","Activity is in foreground")
}
else
{
Log.d("TAG","Activity is in background")
}