2017-08-16 85 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; 
    } 
} 
相關問題