2012-12-18 16 views
2


我有我的活動註冊爲意圖過濾器(明文),並收到多個意圖的問題。這是我的情況:如何捕捉新的意圖而不是舊的?

  1. 我打開電子郵件客戶端 - >標記一些文本 - >按「分享按鈕」,然後選擇我的活動這是正確列出(因爲它註冊爲這種行動的意圖過濾器)
  2. 我的活動打開,我可以清楚地看到它的EXTRA_TEXT中有正確的值(來自電子郵件的標記文本)
  3. 到目前爲止這麼好...但現在,如果我按HOME按鈕(它關閉我的活動,似乎打電話onStop ()) - >然後我再次打開電子郵件客戶端 - >標記一些不同的文本 - >按「分享按鈕」,然後突然我的活動打開(我期望可用活動的列表再次選擇)和收到的意向包含原文文字和n在EXTRA_TEXT中新標記的那個。

我在這裏錯過了什麼?如何通過意向接收新內容?我是否需要以某種方式使先前的Intent無效?

我不得不說,使用「BACK」而不是「HOME」按鈕可以正常工作,並且新的意圖包含按預期新標記的文本。這裏有什麼區別?

我得到我的意圖是這樣的:

intent = getIntent(); 
    intentAction = intent.getAction(); 
    if (intentAction.equals(Intent.ACTION_SEND) && intent.hasExtra(Intent.EXTRA_TEXT)) { 
     Bundle bundle = intent.getExtras(); 

感謝

+0

不確定它是否會工作,但嘗試設置你的'Activity' launchMode爲「singleTop」,然後覆蓋並實現'protected void onNewIntent(Intent intent){...}'。 – Squonk

+0

Squonk,這是正確的答案,但你需要把它作爲答案而不是評論,以便湯姆可以接受:) –

+0

@AlexanderLucas:謝謝你的確認。我不是100%確定這是正確的,這就是爲什麼我只發表評論。 – Squonk

回答

1

嘗試設置你的活動launchMode爲 「singleTop」 然後實現...

@Override 
protected void onNewIntent (Intent intent) { 
    ... 
} 

傳遞給了Intent方法應該是新的。

請參閱該文檔爲onNewIntent

編輯:對於未來的讀者 - 基於下面的評論,似乎文檔可能是不正確的,launchMode應該是「singleTask」,而不是「singleTop」。

+0

編輯:似乎onNewIntent永遠不會與singleTop達成,但它與singleTask達成......將稍微嘗試,並可能接受您的答案。謝謝。 – Tom

+0

謝謝。然而,奇怪的是,onNewIntent()永遠不會被singleTop觸發,而只會觸發singleTask ...嗯 – Tom

+0

@Tom:是的,奇怪。我不得不承認,我以前只需要這種方法,而且不記得我是如何實現它的。也許文檔不正確WRT singleTop/singleTask - 我見過的參考文檔的其他部分有一些錯誤。無論如何,很高興你的工作。 – Squonk