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?"