2014-06-29 11 views
0

應用背景把暫停活動前和傳送數據到最上面的實例

音樂播放器應用程序與正在進行的通知

目標

在通知自來水,我必須:

  1. 將用戶最後的任何活動帶到前面
  2. 顯示全屏音樂播放器,這是每一個活動的佈局的一部分
  3. 不要再創建新的任務,因此這意味着點擊通知符或啓動器圖標帶來了同樣的任務
  4. 確定其中的意圖是從哪裏來的(發射器或通知符)並採取相應措施(通知符彈出全屏播放器,發射器只是恢復當前的任務

實施至今 所以呀,要做到這一點,我有一個名爲LauncherActivity單一實例活動。所有這些都是調用LoginActivity(因爲Facebook SDK,我無法將LoginActivity設置爲singleinstance),然後LoginActivity在登錄後調用MainActivity(或直接調用它並在已經登錄時自行完成)。

在我的服務

現在,我已經掛起的意圖將推出發射活動設置爲主要動作和類別設置爲啓動器(即發射器使用相同的意圖格式):

Intent i = new Intent(this, MyMainActivity.class); 
i.setAction(Intent.ACTION_MAIN); 
i.addCategory(Intent.CATEGORY_LAUNCHER); 
startActivity(i); 

現在我的問題是,如何將數據發送到最頂層的活動?該活動將如何知道它是通過notif而不是啓動器圖標啓動的?

回答

0

當您設置的通知,添加一個「額外」,以表明Intent從通知來了:

Intent i = new Intent(this, MyMainActivity.class); 
i.setAction(Intent.ACTION_MAIN); 
i.addCategory(Intent.CATEGORY_LAUNCHER); 
i.putExtra("fromNotification", true); 
startActivity(i); 

MyMainActivity.onNewIntent()MyMainActivity.onCreate()你可以檢查你是否已經從類似通知發佈這樣的:

if (intent.hasExtra("fromNotification")) { 
    // Have been launched from the Notification here 
} 

onCreate()你需要使用getIntent()而不是僅僅intent

+0

嗨,對不起,遲交回復。當然,這適用於將意向發送到該特定活動,但是如果我希望將其發送到TOPMOST活動?因爲主要活動可以開展其他活動,理想情況下,我想讓用戶回到他之前做的事情,而不是強迫他去主要活動屏幕。 – Neilers

+0

對不起,沒有理解你的所有要求。在這種情況下,如果您的'Notification'發送廣播「Intent」而不是啓動「活動」,可能會更好。然後,廣播「Intent」可以在一個靜態變量中設置一個標誌,指示它正在從「通知」中啓動,然後開始啓動活動。所有的活動都應該在他們的'onResume()'方法中檢查這個靜態變量,以確定應用程序是如何(重新)啓動的。 –