Cela peut atteindre cet objectif de manière efficace en utilisant Application.ActivityLifecycleCallbacks
Par exemple, prenons le nom de la classe Activity comme ProfileActivity, permet de savoir s'il est au premier plan ou en arrière-plan
nous devons d'abord créer notre classe d'application en étendant la classe d'application
qui met en œuvre
Application.ActivityLifecycleCallbacks
Soyons ma classe d'application comme suit
Classe d'application
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;
}
}
dans la classe ci-dessus, il y a un méthord de substitution onActivityResumed 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;
}
où toutes les instances d'activité actuellement affichées à l'écran peuvent être trouvées, vérifiez simplement si votre activité est à l'écran ou non par la méthode ci-dessus.
Enregistrez votre classe Application dans manifest.xml
<application
android:name=".AppController" />
Pour vérifier la météo, l'activité est au premier plan ou en arrière-plan selon la solution ci-dessus, appelez la méthode suivante sur les endroits que vous devez vérifier
AppController applicationControl = (AppController) getApplicationContext();
if(applicationControl.isActivityInForeground()){
Log.d("TAG","Activity is in foreground")
}
else
{
Log.d("TAG","Activity is in background")
}