2013-05-10 127 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