На спине нажмите заставку, показывающую вместо последнего открытого экрана
Я делаю одно приложение для Android. Когда я открываю заставку приложения, показывая, а затем он переходит в основное состояние. Теперь, если пользователь нажмет кнопку "Назад" и откроет приложение из кнопки свертывания. он показывает всплеск снова вместо основной активности. Кто-нибудь может помочь мне решить это? Ниже приведен код активности всплеска, пожалуйста, проверьте и дайте решение.
всплеск
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
fcm_id = FirebaseInstanceId.getInstance().getToken();
session = new SessionManager(getApplicationContext());
usermyid=session.userID();
if(usermyid!=null)
{
System.out.println("usermyid is not null"+usermyid);
usermyid=session.userID();
userd=Long.parseLong(usermyid);
}
else
{
System.out.println("usermyid is null"+usermyid);
android_id = Settings.Secure.getString(getApplicationContext().getContentResolver(),
Settings.Secure.ANDROID_ID);
System.out.println("Without Exclude alphabets"+android_id);
android_id = android_id.replaceAll("[^\\d.]", "");
System.out.println("After Exclude alphabets"+android_id);
long x=Long.parseLong(android_id);
x*=-1;
System.out.println("Final Id" + x);
session_id = String.valueOf(x);
System.out.println("sessionid in skipactivity" + session_id);
session.createLoginSession(session_id);
userd=Long.parseLong(session_id);
}
if (session.checkLogin()) {
if(userd < 0)
{
System.out.println("It is minus"+userd);
prefs = getApplicationContext().getSharedPreferences("MyPrefSKIP", Context.MODE_PRIVATE);
boolean rb0 = prefs.getBoolean("skipstuff", false);
if(rb0 == true){
// Do something
System.out.println("SKIP IS TRUE");
Intent i = new Intent(getApplicationContext(), MainActivity.class);
userid = session.userID();
username=session.username();
userlastname=session.userlastname();
useradd1=session.useradd1();
useradd2=session.useradd2();
usercity=session.usercity();
userstate=session.userstate();
userzip=session.userpincode();
usercountry=session.usercountry();
userphone=session.userphone();
usermail=session.useremail();
usercounter=session.usercounter();
System.out.println("User ID in MAIN : " + userid+username+userlastname+useradd1+useradd2+usercity+userstate+userzip+usercountry);
i.putExtra("id", userid);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
finish();
}
else
{
System.out.println("SKIP IS FALSE");
// String forskipid= String.valueOf(userd);
Intent menuLeft = new Intent(SplashActivity.this, SkipActivity.class);
//menuLeft.putExtra("id",session_id);
startActivity(menuLeft);
}
}
else
{
System.out.println("It is plus"+userd);
Intent i = new Intent(getApplicationContext(), MainActivity.class);
userid = session.userID();
username=session.username();
userlastname=session.userlastname();
useradd1=session.useradd1();
useradd2=session.useradd2();
usercity=session.usercity();
userstate=session.userstate();
userzip=session.userpincode();
usercountry=session.usercountry();
userphone=session.userphone();
usermail=session.useremail();
usercounter=session.usercounter();
System.out.println("User ID in MAIN : " + userid+username+userlastname+useradd1+useradd2+usercity+userstate+userzip+usercountry);
i.putExtra("id", userid);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
finish();
}
} else {
System.out.println("THIS SHOULD NOT BE SHOW");
}
//GetNotification();
AddDeviceToken();
SplashActivity.this.finish();
}
}, SPLASH_TIME_OUT);
}
Основная деятельность
@Override
public void onBackPressed() {
if(getSupportFragmentManager().getBackStackEntryCount()>1){
getSupportFragmentManager().popBackStack();
}else
if(getSupportFragmentManager().getBackStackEntryCount()==0){
this.finish();
}
}
@Override
protected void onResume() {
super.onResume();
viewtocart();
}
@Override
protected void onStart() {
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
mGoogleApiClient.connect();
super.onStart();
}
2 ответа
Обычно в методе onBackPress пользователь не должен переопределять его. Он обычно поддерживается системой Android для завершения действий. Измените свой метод onBackPressed() следующим образом и убедитесь, что он вам помогает.
@Override
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 0 &&
getSupportFragmentManager().findFragmentById(R.id.your_container)!=null) {
Fragment fragment= getSupportFragmentManager().findFragmentById(R.id.your_container);
if(fragment.getClass().getSimpleName().equalsIgnoreCase(FragmentTest.class.getSimpleName())){
getSupportFragmentManager().popBackStackImmediate();
}
}else {
super.onBackPressed();
}
}
РЕДАКТИРОВАТЬ:
кнопку назад и откройте приложение от кнопки сворачивания
Проблема здесь. Так как вы сначала запустили всплеск активности, а затем, переходя на main, вы очищаете флаг и заканчиваете всплеск. Так что задний стек содержит только одно действие.
Когда вы нажимаете кнопку "Назад" в главном действии, приложение завершает свою работу вместо того, чтобы показывать какие-либо действия с обратным стеком. Он находится в mainacctivity, когда вы нажимаете назад, вызывается метод onPause(),onStop() и onDestroy().
Причина, по которой всплеск вызывается снова, когда вы снова открываете приложение из недавних, заключается в том, что приложение запускается снова, и всплеск является первым действием. Отсюда это показано.
Нажатие кнопки "Назад" в домашней активности приводит к выходу из приложений, но нажатие кнопки "Домой" минимизирует ваше приложение. Свернутое приложение открывает приложение с того места, где вы его оставили, так как оно будет в памяти.
Чтобы узнать больше о жизненных циклах деятельности, перейдите по этой ссылке https://developer.android.com/guide/components/activities/activity-lifecycle.html
В вашей SplashActivity добавьте finish(), когда вы собираетесь запустить Intent для mainActivity.
В вашей MainActivity реализуйте onBackPresssed(),onDestroy() и onResume();
Надеюсь, это поможет.