2017-08-16 77 views
0

我正在学习在android中开发,我需要您的帮助。 这是我用它来收我的应用程序...关闭应用程序并在启动器上打开

boolean twice; 

@Override 
public void onBackPressed() { 
    if(twice) { 
     Intent intent = new Intent(Intent.ACTION_MAIN); 
     intent.addCategory(Intent.CATEGORY_HOME); 
     intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(intent); 
     finish(); 
     System.exit(0); 
    } 
    twice = true; 
    toastMessage(getResources().getString(R.string.msg0a)); 
    new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      twice = false; 
     } 
    }, 2000); 
} 

问题是,当我回到我的应用程序在其最后一次活动开,我whant它LAUNCHER活动开放。

编辑:其原因是:我有一个活动,用户可以从帐户登录和登录活动的命运。注销后,当用户打开我的应用程序时,他必须一次又一次地通过登录活动,而他不登录。

+0

只需调用finish(); inside onBackPressed() –

+0

@ dcd4u2:你能告诉我们你是如何回到应用程序?通过应用程序图标在家里或最近的屏幕? – AndiGeeky

+0

@AndiGeeky:是的,通过家里的图标。 – dcd4u2

回答

1

您需要经过如何Activity, Tasks and Back stack works in Android

现在,让我们对您的方案工作,如果我直接从你的问题假设,你想要的是:

  1. 当用户点击“两次”对Android的返回按钮,你想关闭应用程序。
  2. 关闭应用程序,当用户通过回到你的应用程序,

    • 攻从主屏幕应用启动

    • 最近通话后

解决方案: 使用CLEAR_TASK和NEW_TASK标志和目标活动创建一个意图作为启动程序活动。

TransparentActivity.java

public class TransparentActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     int flag = (getIntent().getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY); 
     if (Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY == flag) { 
      PackageManager pm = getPackageManager(); 
      Intent intent = pm.getLaunchIntentForPackage(getPackageName()); 
      getApplication().startActivity(intent); 
     } 

     finish(); 
    } 
} 

ApplicationUtils.java

public static void kill(Context context) { 
     Intent intent = new Intent(context, TransparentActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NO_HISTORY); 
     context.startActivity(intent); 
    } 

只需拨打下面一行的退出你的应用程序:

ApplicationUtils.kill(); 

以上调用会杀了你的应用程序当你从上述任一选项开始时,它将从启动器开始。 :)

+0

很有意思,它像一个魅力。谢谢AndiGeeky! – dcd4u2

+0

@ dcd4u2:欢迎光临! – AndiGeeky

2

强烈建议您永远不要叫System.exit(0);,如果您的应用程序需要被杀死,您应该让Android处理。

尝试这样的事情,它会让你控制后退之间的延迟,并且非常可读。

// Time in millis between presses. 
private final static int BACK_EXIT_DELAY = 2000; 

private long backLastPress = 0; 

@Override 
public void onBackPressed() { 
    long now = System.currentTimeMillis(); 
    if(now - backLastPress < BACK_EXIT_DELAY) { 
     finish(); 
    } else { 
     Toast.makeToast(this, "Press back again to exit.", Toast.LENGTH_SHORT).show(); 
     backLastPress = now; 
    } 
} 
相关问题