2011-06-16 97 views
34

我不希望用戶能夠回到我的應用程序的啓動畫面。一種解決方案似乎是檢查當前下面的活動是否是啓動畫面的一個實例,並在這種情況下退出應用程序,如下面的代碼所示。但是,我不知道如何檢查堆棧中以前的活動。任何人都可以幫忙?有沒有其他辦法可以禁用'返回'給定的活動?如何禁用「返回」某些活動?

@Override 
public void onBackPressed() { 
    if(<previous activity in stack is an instance of splashscreen>){ 
     Intent exit_intent=new Intent(CurrentActivity.this, SplashScreen.class); 
     exit_intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     exit_intent.putExtra("EXIT", true); 
     context.startActivity(exit_intent); 
    } 
} 

回答

110

呼叫在閃屏活動finish()開始下一個活動之後。

另一種方法是這個屬性在AndroidManifest.xml添加到您的活動:android:noHistory="true"

例子:

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

此屬性指示的Android從歷史堆棧中刪除SplashActivity一旦其導航離開。

+0

非常感謝「機器人:noHistory =」真「」 - 這是非常有益的! – Simcha 2014-12-09 15:11:46

+0

爲什麼finish()工作? – Joop 2015-05-02 09:33:38

+0

finish()(在開始下一個活動之後在原始活動中添加時)可以工作,因爲Android不會「返回」已完成(已銷燬)的活動,而只會停留在已停止或已停止的活動中。 – 2016-07-25 01:06:19

19

只需撥打context.finish()context.startActivity()

+5

好的替代方案,稱爲[forwarding](http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/Forwarding.html) – 2011-06-16 19:18:47

+0

Might在開始下一個活動時播放媒體文件時不起作用。因爲它可能會縮短。 – Mike6679 2013-11-19 05:43:32

+0

不適用於我sdk 22 .... – Micro 2015-06-28 22:38:58

9

嘗試呼叫從您的閃屏下一Activity時注意以下事項

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); 
2
<activity android:name=".SplashActivity" android:noHistory="true"/> 

documentation

無論活動應該從活動堆棧中刪除並完成(其finish()方法被調用),當用戶從其移出 並且其不再在屏幕上可見時 - 如果它應該是 完成,則爲「真」,否則爲「假」。默認值是「false」。

值爲「true」表示該活動不會留下歷史記錄 跟蹤。它不會保留在任務的活動堆棧中,因此 用戶將無法返回到該堆棧。在這種情況下,如果您爲此活動的 結果啓動另一個活動,則永不會調用onActivityResult() 。

這個屬性在API級別推出3