我正在設計一個用於緊急警報的應用程序。警報來自服務器,並且與該服務器的連接保持服務狀態。從服務啓動對話活動導致'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);
嗨,謝謝你的回覆。我的對話已經是主題對話活動。我會更新原始問題以清除它 – Stephen 2013-05-10 13:06:53
您可能想重新考慮一些設計方面。爲什麼不只是一個完整的活動?如果您的目標是完全中斷用戶工作流程以支持緊急消息,則完整的活動將更適合,並且您可以在完整活動中包含更多內容。類似於鬧鐘。 – 2013-05-10 14:30:43
你好,是的,我可以做到這一點。但問題不存在嗎?或者是因爲這個活動的主題是對話? – Stephen 2013-05-10 15:21:25