2013-11-23 71 views
0

我有一個SplashActivity打開時,我第一次打開應用程序,這導致應用程序的MainActvity我想編程後退按鈕,以便它發送到啓動器,而不是SplashActivity。獲取返回按鈕去啓動器

public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { 

     //what goes here?? 
    } 
    return super.onKeyDown(keyCode, event); 
} 

還是我從SplashActivity啓動MainActivity時設置右旗得到這個。

編輯:

我想出答案的一部分,以確保SplashActivity永遠不會推出,我用

Intent i=new Intent(SplashActivity.this,MainActivity.class); 
       i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
       startActivity(i); 

我有一個重定向到MainActivity其他三個Activities,我想提供一個一致的行爲,我可以每次從MainActivity重新導向到啓動器。

EDIT2

MainActivity--->Camera/Gallery--->ImagePreview--->ScannedResults-->image delete dialog-->MainActivity

我按backMainActivity是有可能的是,用戶刪除從ImagePreview圖像以及它不能回去ScannedResultsCameraImagePreview

+0

你爲什麼不使用意圖 – Gunaseelan

+0

@Gunaseelan檢查出我的cl arification,我編輯了帖子 – vamsiampolu

+0

嘗試刪除'i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);'這一行。 – Gunaseelan

回答

1

如果你想關閉該應用程序ü可以使用

public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { 
     finish(); 
    } 
    return super.onKeyDown(keyCode, event); 
} 

但如果你只想隱藏應用程序(在後臺仍然在運行),可以使用

public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { 
     moveTaskToBack(true); 
    } 
    return super.onKeyDown(keyCode, event); 
} 

希望它會幫助..

0

如果您只有2個活動SplashActivity和MainActivity。在這種情況下,從SplashActivity調用finish()開始MainActivity並在MainActivity中重寫onBackPressed()並調用finish()。

+0

查看我的編輯到我的文章 – vamsiampolu

0

從本質上來說,你想從每個活動去啓動器(我假設它不是主要活動,否則)。在這種情況下,每當你用一個Intent開始任何活動時,就立即調用finish()。

Intent intent = new Intent(this, WhateverActivityYouWantToCall.class); 
startActivity(intent) 

//call finish() to end current activity 
finish(); 

編輯:話雖這麼說,如果你希望它在後退按鈕按下發生,您可以覆蓋onBackPressed:

@Override 
public void onBackPressed() { 
    Intent quit = new Intent(Intent.ACTION_MAIN); 
    quit.addCategory(Intent.CATEGORY_HOME); 
    quit.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(quit); 
    finish(); 
} 
+0

我的應用程序中的活動重新導向到後退按鈕時按MainActivity。我想MainActivity重定向到啓動程序,而不是重定向到另一個活動在任何時候。在我的應用程序,向後導航是沒有意義的,從MainActivity導航回另一個Activity可能會顯示不存在的數據。 – vamsiampolu

1

如果排除從最近用過的活動,通過使用android:excludeFromRecents它也不會在返回堆棧中,所以用戶將無法用BACK按鈕和最近的值不能手動返回它。只要編輯您的清單:

<activity android:name=".SplashActivity" android:excludeFromRecents="true" /> 

編輯

你總是可以擺脫的多種活動,並切換到片段,所以你將有隻有一個活動,始終可見在最近用過,但仍然可以有即。 SplashFragment出彷彿回到堆棧

+0

我編輯了我的帖子以提供完整的信息披露,只是當我啓動活動時,我正在傳遞圖片的路徑,此圖片可能會在我指定的兩個點中的任何一處被刪除,返回並嘗試執行與圖像有關的東西,後來發現圖像不存在對用戶不公平。 – vamsiampolu

+0

我發現通過使用'android:excludeFromRecents'而不是'FLAG_ACTIVITY_CLEAR_TASK'和'moveTaskToBack(true)'我發現我的應用程序不會顯示在最近的應用程序抽屜中。我認爲Quora應用程序有類似的問題,它消失從最近的應用程序,並稍後重新出現,有時。 – vamsiampolu

+0

然後切換到片段。請參閱已編輯的答案 –

0

將此代碼添加到您的SplashActivity你的清單:

<activity 
android:name=".SplashActivity" 
android:noHistory="true" > 

之後,你就可以i.addFlags的忘記(意向。FLAG_ACTIVITY_CLEAR_TASK);您的代碼:

Intent intent = new Intent (SplashActivity.this, MainActivity.class); 
startActivity(intent); 
SplashActivity.finish();