Skip to content Skip to sidebar Skip to footer

How To Launch The Same Activity Even App Is In Background?

I have 3 activities in my application, log in, A and B. login activity is my launcher page. After login, it redirects to activity A.While click on home button now, it pause the act

Solution 1:

You need to finish your every activity whenever your app goes into background

HomeWatcher.java

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.util.Log;

publicclassHomeWatcher {

    staticfinalStringTAG= HomeWatcher.class.getSimpleName();
    private Context mContext;
    private IntentFilter mFilter;
    private OnHomePressedListener mListener;
    private InnerRecevier mRecevier;

    publicHomeWatcher(Context context) {
        mContext = context;
        mFilter = newIntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
    }

    publicvoidsetOnHomePressedListener(OnHomePressedListener listener) {
        mListener = listener;
        mRecevier = newInnerRecevier();
    }

    publicvoidstartWatch() {
        if (mRecevier != null) {
            mContext.registerReceiver(mRecevier, mFilter);
        }
    }

    publicvoidstopWatch() {
        if (mRecevier != null) {
            mContext.unregisterReceiver(mRecevier);
        }
    }

    classInnerRecevierextendsBroadcastReceiver {
        finalStringSYSTEM_DIALOG_REASON_KEY="reason";
        finalStringSYSTEM_DIALOG_REASON_GLOBAL_ACTIONS="globalactions";
        finalStringSYSTEM_DIALOG_REASON_RECENT_APPS="recentapps";
        finalStringSYSTEM_DIALOG_REASON_HOME_KEY="homekey";

        @OverridepublicvoidonReceive(Context context, Intent intent) {
            Stringaction= intent.getAction();
            if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
                Stringreason= intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
                if (reason != null) {
                    if (mListener != null) {
                        if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {
                            mListener.onHomePressed();
                        } elseif (reason.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {
                            mListener.onRecentAppPressed();
                        }
                    }
                }
            }
        }
    }
}

MyApplication.java

publicclassMyApplicationextendsApplicationimplementsApplication.ActivityLifecycleCallbacks {

    privatestaticMyApplication mInstance;
    publicstaticStringTAG = MyApplication.class.getSimpleName();
    privateActivity mActivity;

    @OverridepublicvoidonCreate() {
        super.onCreate();
        mInstance = this;
        registerActivityLifecycleCallbacks(this);

        HomeWatcher mHomeWatcher = newHomeWatcher(this);
        mHomeWatcher.setOnHomePressedListener(newOnHomePressedListener() {
            @OverridepublicvoidonHomePressed() {
                // do other stuff before finishLog.d(TAG, "onHomePressed");
                if (mActivity != null)
                    mActivity.finishAffinity();
            }

            @OverridepublicvoidonRecentAppPressed() {
                // do other stuff before finishLog.d(TAG, "onRecentAppPressed ");
                if (mActivity != null)
                    mActivity.finishAffinity();
            }
        });
        mHomeWatcher.startWatch();
    }

    @OverridepublicvoidonActivityCreated(Activity activity, Bundle savedInstanceState) {
        mActivity = activity;
    }

    @OverridepublicvoidonActivityStarted(Activity activity) {
        mActivity = activity;
    }

    @OverridepublicvoidonActivityResumed(Activity activity) {
        mActivity = activity;
    }

    @OverridepublicvoidonActivityPaused(Activity activity) {

    }

    @OverridepublicvoidonActivityStopped(Activity activity) {

    }

    @OverridepublicvoidonActivitySaveInstanceState(Activity activity, Bundle outState) {

    }

    @OverridepublicvoidonActivityDestroyed(Activity activity) {

    }
}

AndroidManifest.xml

<applicationandroid:name="your_package_name.MyApplication">
    ....
 </application>

Solution 2:

If you only want to launch login activity when "A" activity comes from background, you could use the "onResume" method. You could launch login activity with a normal intent and in the same login activity you should check if the user is logged or not to act accordingly

Post a Comment for "How To Launch The Same Activity Even App Is In Background?"