SadeQ digitALLife
SadeQ digitALLife

Reputation: 1444

How to get Activity that paused and goes in background?

I have a situation, that when my app goes in background (not killed completely!) and last alive activity was BActivity. In this state. I receive a push notification.

When notification is clicked it should open the last activity which was opened earlier i.e., (BActivity).

Question How to open that last specific paused activity?

Is any answer like set flag or manifest configs?

Upvotes: 0

Views: 720

Answers (2)

Shouheng Wang
Shouheng Wang

Reputation: 648

You can try by adding the activity life cycle callback to your application. And judge the activity type of current paused or resumed activity, etc. The sample code:

public static void init(Application app) {
        app.registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {

            private int activityCount = 0;

            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
                AppUtils.attachActivity(activity);
            }

            @Override
            public void onActivityStarted(Activity activity) {
                activityCount++;
                AppUtils.attachForeActivity(activity);
            }

            @Override
            public void onActivityResumed(Activity activity) {
                if (!isForeGround) {
                    isForeGround = true;
                    notifyForegroundChange(true);
                }
            }

            @Override
            public void onActivityPaused(Activity activity) {
                // no-op
            }

            @Override
            public void onActivityStopped(Activity activity) {
                AppUtils.detachForeActivity(activity);
                activityCount--;
                if (activityCount == 0) {
                    isForeGround = false;
                    notifyForegroundChange(false);
                    Log.i(TAG, "Activity foreground: " + System.currentTimeMillis());
                }
            }

            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
                // no-op
            }

            @Override
            public void onActivityDestroyed(Activity activity) {
                AppUtils.detachActivity(activity);
            }
        });
    }

Here we use the activityCount filed to calculate current actived activities count. When it's 0, the app is background, otherwise foreground. You can judge the activity type by the callback method provided.

Hope it helps!

Upvotes: 0

K-dari
K-dari

Reputation: 216

If I understood correctly, you want to bring your app back to foreground after you receive a push notification? In that case, use the following code:

Intent intent = new Intent(context, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                                                 
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(intent);

where MainActivity is the launcher Activity that you have specified in AndroidManifest.xml.

This should bring your app to foreground in its previous state, if there ever was one, and otherwise launch MainActivity.

For an explanation see here.

Upvotes: 1

Related Questions