我正在设计一个用于紧急警报的应用。警报来自服务器,并且与该服务器的连接保持在服务中。
如果服务从服务器收到紧急请求,它会检查特定活动是否已打开。如果它是,它让它知道已触发紧急情况,并且活动启动带有一些选项的对话活动。然后它处理这个新对话活动的结果。
但是,如果服务注意到活动未打开,我希望它仍然启动对话框。我知道这不是一个好的做法,但由于这种紧急情况的重要性,我不想依赖通知(如果活动已关闭,已经在使用通知,让用户知道应用程序仍在监听紧急情况)。
目前发生的是在服务中执行以下代码并启动对话框。但是,“主”活动(应用程序中唯一的其他活动)也会在对话框后面打开。我真正想要发生的是......
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);
答案 0 :(得分:0)
我认为不应该尝试显示没有明显显示活动的对话框,而应该考虑启动一个主题为Dialog的Activity。只需将以下主题:http://developer.android.com/reference/android/R.style.html#Theme_Dialog(或类似主题)应用于您的EmergencyNotificationActivity即可。你可能不得不调整你的类来表现得像一个对话而不是启动一个(我假设你正在做的是当前)。
此方法还允许您不必检查活动是否已存在。