2011-07-05 80 views
11

我正在爲通知托盤創建通知。我指定一個點擊的意圖是這樣的:無法移除意圖額外!

Intent intent = new Intent(context, MyActivity.class); 
intent.putExtra("foo", true); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
intent.setData(Uri.parse("" + System.currentTimeMillis())); 

的MyActivity類被推出僅與「富」參數呈現良好。然而,我無法擺脫額外的事後 - 它似乎在Intent堅持:

// MyActivity 
public void onNewIntent(Intent intent) { 
    super.onNewIntent(intent); 

    // please go away.. 
    intent.removeExtra("foo"); 
    getIntent().removeExtra("foo"); 
} 

遍歷意圖的按鍵顯示,「富」不再存在。但是,如果我背景活動,然後再次將其帶到前臺,「foo」參數再次出現。

任何人都知道如何真正擺脫它?我也嘗試調用setIntent(),同樣的行爲。這就像發射器堅持原來的意圖並不斷重複使用它。

謝謝

+0

這是Java和指針的愚蠢情況之一。您可能必須嘗試完成原始意圖後複製它沒有富。 – hwrdprkns

+0

嗯,如何確定最初的意圖,我會做一些類似onNewIntent()的調用finish(),然後再重新啓動該活動?我想用戶不會看到這個鬼鬼祟祟的跳躍,我會擺脫那個「富」的額外。我認爲它可以工作! – user291701

+0

'Intent.finalize()'? – hwrdprkns

回答

0

這正是Android正在做的。在onNewIntent方法中修改意圖參數對通知系統的存儲意圖沒有影響。您應該創建一個新的Intent並將其存儲在本地活動中,並像其他任何數據一樣保存和恢復它。

編輯:如果你不需要重用意圖本身,它可能會更有意義,分別存儲相關的數據。

+0

呵呵我不太關注 - 你的意思是創建一個新的Intent並且用它調用setIntent()? (似乎給出了相同的行爲)。否則,我們必須自己管理這個狀態,我想呢?謝謝 – user291701

+0

哦,你是否試圖將意圖重新放回通知欄中,但額外改變了?我認爲正確的做法是創建一個新的意圖和一個新的通知。 – robamaton

+7

是的 - 我想刪除該意圖額外的,然後下一次用戶從啓動器啓動,我希望額外的消失。我試着創建一個新的通知,並調用setIntent(),但同樣的行爲 - 「富」鍵回來折磨我。 – user291701