我正在使用GCM-Notifications,它们工作得非常好!在IntentService
的GCM通知中,我使用以下代码创建通知:
/**
*
*/
private void sendMessagesUpdatedNotification() {
Intent resultIntent = new Intent(this, MessageActivity.class);
resultIntent.putExtra(Globals.KEY_UPDATED, true);
PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0, resultIntent, PendingIntent.FLAG_ONE_SHOT);
String title = this.getResources().getString(R.string.text_messages_updated);
String message = this.getResources().getString(R.string.text_messages_updated_message);
NotificationCompat.Builder builder = this.buildNotification(title, message);
NotificationManager notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
builder.setSmallIcon(R.drawable.notification_ic_message);
builder.setContentIntent(resultPendingIntent);
builder.setAutoCancel(true);
notificationManager.notify(MESSAGES_UPDATED_ID, builder.build());
}
如果我点击Notification我的活动开始(或者如果shes已经运行则重新加载)。一切都很棒。除了一件事:
我想要另一个功能。如果我的活动已经在前面,我希望我的内容能够自动更新,而无需点击通知。
这有可能吗?
答案 0 :(得分:2)
这有可能吗?
使用活动巴士。
该服务将一个活动发布到公交车上说“嘿,我们收到了一条消息!”#34;。您在前台的活动将在公交车上注册以接收活动。如果它获得了该事件,它将更新UI。但是,如果活动不在前台,那么事件总线实现的配方会让您的服务知道活动没有响应,因此您可以将Notification
作为后备机制。
我知道有三种主要的事件总线实现:
LocalBroadcastManager
:docs和a sample app 示例应用程序都是相同的核心应用程序,只是使用不同的事件总线实现。我使用AlarmManager
来触发服务而不是GCM消息,但同样的概念适用于您使用GCM的情况。
就我个人而言,我更喜欢greenrobot的EventBus,以获得更灵活的线程选项,但这三种选项都适用于您的情况。