2013-03-25 21 views
2

我有一個活動棧,並使用下面的代碼帶來的主要活動的「活躍」狀態:我如何強制一項活動使用我通過它的意圖附加項目?

Intent i = getBaseContext().getPackageManager() 
.getLaunchIntentForPackage(getBaseContext().getPackageName()); 
i.putExtra("clearCache", true); 
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(i); 

的問題是,當我嘗試檢索到getIntent().getExtras()clearCache額外的,一個電話返回null。

我的理解是,因爲我正在啓動的活動已經在堆棧上,並且因爲我設置了Intent.FLAG_ACTIVITY_CLEAR_TOP標誌,所以返回的Intent將成爲最初的意圖。

如何在我啓動的活動中訪問呼叫意圖?

回答

3

在上FLAG_ACTIVITY_CLEAR_TOP谷歌的文檔,你應該在新的意圖,每次獲得:

「如果設置,以及正在啓動的活動在目前的任務已經運行,然後,而不是推出的一個新實例該活動,其上的所有其他活動都將被關閉,並且這種意圖將作爲新的Intent傳遞給(現在在上面的)舊活動。「

...

「活動B在上面的例子中當前運行的實例要麼接受新的意圖你是從這裏開始,在其onNewIntent()方法,或者本身完成,與新的意圖重新啓動。如果它已經聲明它的啓動模式是「multiple」(默認),並且你沒有在同一個intent中設置FLAG_ACTIVITY_SINGLE_TOP,那麼它將被完成和重新創建;對於所有其他的啓動模式,或者如果FLAG_ACTIVITY_SINGLE_TOP被設置,那麼這個意圖將被傳遞到當前實例的onNewIntent()。「

有關詳細信息看看這裏:

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP

希望幫助!

+0

謝謝!重寫'onNewIntent()',然後從那裏處理新的意圖解決了我的問題 – Ryan 2013-03-26 08:23:23

0

你只需通過將特定活動的名稱更改您的代碼並保存代碼的其餘部分,因爲它是

Intent i = new Intent(MapActivity.this, MainActivity.class); 
         i.putExtra("clearCache", true); 
         i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
         startActivity(i); 
相關問題