2011-02-05 20 views
5

我截取了短信中的一些信息。然後,在我的SmsListener中,我正在創建通知以顯示在狀態欄中。 然後,當用戶點擊一個通知我想如何將活動帶到前臺(或創建如果不存在)?

  1. 從SMS
  2. 帶來MainActivity到前臺(如果這樣的活動不存在但它應該創建)
  3. 傳遞給它的數據進行一些用戶界面改變這種MainActivity在此基礎上的數據

我的活動定義爲

<activity 
     android:name=".MainActivity" 
     android:screenOrientation="sensor" 
     android:label="@string/app_name" 
     android:launchMode="singleTask"/> 

活動的推出,

Intent i = new Intent(); 
i.setClass(context, MainActivity.class); 
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(i); 

而且在我的活動我已重寫方法onNewActivity

@Override 
public void onNewIntent(Intent intent){ 
    super.onNewIntent(intent); 

    // I have data from broadcast in intent variable passed to this activity 
    processDataFromBroadcast(intent); 
} 

它的工作原理,如果在MainActivity已經存在正常,但如果MainActivity不存在啓動然而onNewIntent不叫做

然後我試着從onCreate調用processDataFromBroadcast:processDataFromBroadcast(getIntent())。 首次將數據從我的廣播正確傳遞到活動。 但是,如果MainActivity被髮送到後臺,然後再次被帶到前臺,onCreate或onNewIntent被調用,並且processDataFromBroadcast被再次執行,意圖通過廣播發送,因此我的MainActivity被來自廣播的數據更新,每次該應用程序帶到前臺 - 後者是不需要的,我怎麼能讓我的活動在第一次處理後忘記這個意圖。 Here is sample application.

回答

5

爲活動推出僅一個自身實例,看看在<activity>清單元素,特別是android:launchMode。你想用singleTasksingleInstance來配置它。

要將數據傳遞給您的活動,請將數據添加到您用來打開它的Intent。要通過意圖傳遞數據,請在將其發送出去之前使用意向的putExtra()方法,並使用getExtra()方法在接收活動中檢索它們。

我假設你大概知道意圖的工作原理,但如果不是的話,你可以通過看看this Android開發者文章來了解更多關於意圖的內容。

+0

感謝您的迴應。不過,請參閱我對該問題的更新。 – Solvek 2011-02-05 12:13:40

1

的情況下,您的問題仍然沒有得到解決,因爲我只是運行到同一個問題,這裏是我如何解決它:

我在過程中它的創作意圖把一個時間戳intentId作爲一個額外的。第一次,我正在處理意圖onCreate()onNewIntent()我正在讀intentId並將其存儲爲最後處理的意向。所以下一次調用onCreate()onNewIntet()我可以檢查intentId,如果它等於最後處理的intent的id,我就忽略它!它不知道這是否有助於你的情況,也許你可以採用它。

爲了使intentId獨立於活動生命週期,您可以將其保留在userdefaults中。

我同意一個人會希望在onNewIntent應該打電話setIntent(new Intent())

0

答案很晚,但對尋求解決方案的其他人可能會有幫助。

只需添加下面的代碼行:

Intent mIntent = new Intent(this, SplashActivity.class); 
mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // You need this if starting the activity from a service 
mIntent.setAction(Intent.ACTION_MAIN); 
mIntent.addCategory(Intent.CATEGORY_LAUNCHER); 

哪裏SplashActivity是初始應用程序,應用程序的第一個畫面的名稱。

希望它有幫助。 :)

相關問題