0

我正在设计一个用于紧急警报的应用程序。警报来自服务器,并且与该服务器的连接保持在服务中。

如果服务收到来自服务器的紧急请求,它会检查特定活动是否打开。如果是,它会告诉它已触发紧急情况,并且该活动会启动带有一些选项的对话活动。然后它处理来自这个新对话活动的结果。

但是,如果服务注意到该活动未打开,我希望它无论如何都会启动对话框。我知道这不是一个好的做法,但由于这种紧急情况的重要性,我不想依赖通知(如果活动关闭,通知已经在使用中,让用户知道应用程序仍在侦听紧急情况)。

当前发生的是在服务中执行以下代码并启动对话框。但是,“主要”活动(应用程序中唯一的其他活动)也在对话框后面打开。我真正想要发生的是...

1)服务启动主要活动,然后打开对话框,以便我可以轻松捕获结果。

2) 该服务仅启动对话活动,我使用广播接收器来捕获此活动的结果。

1 将使用已经存在的机制来捕获活动的结果。但是我不喜欢以这种方式将活动链接在一起的想法。

2 意味着我可以完全忽略主要活动(因为在这种情况下我真的不需要它)但似乎更多的是一种解决方法。

我真正要问的是两件事。考虑到我的情况,最佳实践是什么?我如何达到第 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);
4

1 回答 1

0

我认为与其尝试在不明显显示 Activity 的情况下显示对话框,不如考虑启动以 Dialog 为主题的 Activity。只需将以下主题: http: //developer.android.com/reference/android/R.style.html#Theme_Dialog(或类似主题)应用于您的 EmergencyNotificationActivity。您可能需要调整您的课程以使其表现得像一个对话框,而不是启动一个对话框(我假设这是您当前正在做的事情)。

此方法还允许您不必检查 Activity 是否已经存在。

于 2013-05-10T12:11:54.450 回答