可能な解決策はActivityLifecycleCallbacksを登録し、その最後のアクティビティの参照名を保存することですonResumeと呼ばれる:
public class ActivityChecker implements Application.ActivityLifecycleCallbacks {
private static ActivityChecker mChecker;
private String mCurrentResumedActivity = "";
public static ActivityChecker getInstance() {
return mChecker = mChecker == null ? new ActivityChecker() : mChecker;
}
// If you press the home button or navigate to another app, the onStop callback will be called without touching the mCurrentResumedActivity property.
// When a new activity is open, its onResume method will be called before the onStop from the current activity.
@Override
public void onActivityResumed(Activity activity) {
// I prefer to save the toString() instead of the activity to avoid complications with memory leaks.
mCurrentResumedActivity = activity.toString();
}
public boolean isTheLastResumedActivity(@NonNull Activity activity) {
return activity.toString().equals(mCurrentResumedActivity);
}
// [...] All other lifecycle callbacks were left empty
}
ActivityLifecycleCallback SはあなたのApplicationクラスに登録することができます。
public class App extends Application {
public App() {
registerActivityLifecycleCallbacks(ActivityChecker.getInstance());
}
}
はマニフェストに登録することを忘れないでください:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="your.package.name">
<application
...
android:name=".App"
> ...
</application>
</manifest>
その後、あなたはあなたの基本活動でそれを使用することができます。カスタムアプリケーションのクラスを登録する
とActivityLifecycleCallbacks:
public class MyBaseActivity {
@Override protected void onStop() {
if(ActivityChecker.getInstance().isTheLastResumedActivity(this)) {
// Home button touched or other application is being open.
}
}
}
参考How to get current foreground activity context in android?:https://developer.android.com/reference/android/app/Application.html
これを書いた後、私は、現在は活動を再開取得するために、いくつかの他のオプションと、このリンクを発見しました。
この 'otherActivity'を起動し、' onStop'フックでチェックすると 'protected boolean otherActivityCalled = false; 'を' true'に設定することができます。 'false'の場合、' currentActivity'が別の理由で停止したことを意味します。 – AnixPasBesoin