Można to osiągnąć w efektywny sposób przy użyciu Application.ActivityLifecycleCallbacks
Na przykład, weźmy nazwę klasy Activity jako ProfileActivity pozwala sprawdzić, czy jest na pierwszym planie, czy w tle
najpierw musimy stworzyć naszą klasę aplikacji, rozszerzając Application Class
które implementuje
Application.ActivityLifecycleCallbacks
Niech moja klasa aplikacji będzie następująca
Klasa aplikacji
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;
}
}
w powyższej klasie jest methord przesłanianie onActivityResumed z 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;
}
gdzie można znaleźć wszystkie instancje aktywności, które są aktualnie wyświetlane na ekranie, po prostu sprawdź, czy Twoja aktywność jest na ekranie, czy nie, za pomocą powyższej metody.
Zarejestruj klasę aplikacji w pliku manifest.xml
<application
android:name=".AppController" />
Aby sprawdzić pogodę Aktywność jest na pierwszym planie lub w tle, zgodnie z powyższym rozwiązaniem, wywołaj następującą metodę w miejscach, które musisz sprawdzić
AppController applicationControl = (AppController) getApplicationContext();
if(applicationControl.isActivityInForeground()){
Log.d("TAG","Activity is in foreground")
}
else
{
Log.d("TAG","Activity is in background")
}