2013-05-10 175 views
0

我正在設計一個用於緊急警報的應用程序。警報來自服務器,並且與該服務器的連接保持服務狀態。從服務啓動對話活動導致'MainActivity'也啓動

如果服務收到來自服務器的緊急請求,它將檢查特定活動是否打開。如果是這樣,它會讓它知道已經觸發了緊急情況,並且該活動會啓動一些對話活動並帶有一些選項。然後它處理來自這個新對話活動的結果。

但是,如果服務指出,活動不開,我希望它無論如何啓動對話。我知道這不是很好的做法,但由於這種緊急情況的重要性,我不想依賴通知(如果活動已關閉,已通知用戶知道應用程序仍在監聽緊急情況)。

目前發生的情況是,下面的代碼在服務中執行並且對話框啓動。但是,「主」活動(應用程序中唯一的其他活動)也會在對話框後面打開。我真的希望發生的是,要麼...

1)服務推出的主要活動,然後打開的對話框,這樣我可以輕鬆地捕獲結果。

2)服務推出只有對話活動,我使用的廣播接收器捕捉到這項活動的結果。

1將使用已有的機制來捕獲活動的結果。不過,我不喜歡以這種方式將活動鏈接在一起的想法。

2意味着我可以忽視的主要活動都在一起(因爲我並不真的需要它在這種情況下),但似乎更多的得到解決。

我真正要問的是兩件事。根據我的情況,最佳做法是什麼?我如何取得第二名?這是我服務中的啓動代碼。此代碼中的通知是指將打開的對話框活動。

if (MainActivity.isActivityInUI) { 
      //Dealt with by activity 
      sendMessageAlert(message); 

     } else { 
      //Launch dialog directly from service 
      Intent notification = new Intent(this, 
        EmergencyNotificationActivity.class); 
      Bundle args = new Bundle(); 
      args.putString(MobileMessage.EXTRA_LOCATION_NAME, 
        message.locationName); 
      args.putString(MobileMessage.EXTRA_ID, 
        String.valueOf(message.id)); 
      args.putDouble(MobileMessage.EXTRA_LATITUDE, 
        Double.valueOf(message.latitude)); 
      args.putDouble(MobileMessage.EXTRA_LONGITUDE, 
        Double.valueOf(message.longitude)); 


      //and the flag to let the notification know this is from a service... 
      args.putBoolean(EXTRA_FROM_SERVICE, true); 

     notification.putExtras(args); 

      //add flag because this is being called from outside of an activity 
      notification.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |ActivityInfo.LAUNCH_SINGLE_INSTANCE); 

      startActivity(notification); 

回答

0

我認爲不是在沒有明顯顯示活動的情況下顯示對話框,而是應該考慮啓動一個主題像對話框一樣的活動。只需將以下主題應用於您的EmergencyNotificationActivity:http://developer.android.com/reference/android/R.style.html#Theme_Dialog(或類似的主題)。你可能不得不調整你的類,而不是啓動一個對話框(我假設你正在做什麼)。

這種方法也可以讓你不必檢查一個Activity是否已經存在。

+0

嗨,謝謝你的回覆。我的對話已經是主題對話活動。我會更新原始問題以清除它 – Stephen 2013-05-10 13:06:53

+0

您可能想重新考慮一些設計方面。爲什麼不只是一個完整的活動?如果您的目標是完全中斷用戶工作流程以支持緊急消息,則完整的活動將更適合,並且您可以在完整活動中包含更多內容。類似於鬧鐘。 – 2013-05-10 14:30:43

+0

你好,是的,我可以做到這一點。但問題不存在嗎?或者是因爲這個活動的主題是對話? – Stephen 2013-05-10 15:21:25