使用IntentService更新正在运行的Activity

时间:2015-03-21 13:47:30

标签: android

我正在使用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已经运行则重新加载)。一切都很棒。除了一件事:

我想要另一个功能。如果我的活动已经在前面,我希望我的内容能够自动更新,而无需点击通知。

这有可能吗?

1 个答案:

答案 0 :(得分:2)

  

这有可能吗?

使用活动巴士。

该服务将一个活动发布到公交车上说“嘿,我们收到了一条消息!”#34;。您在前台的活动将在公交车上注册以接收活动。如果它获得了该事件,它将更新UI。但是,如果活动不在前台,那么事件总线实现的配方会让您的服务知道活动没有响应,因此您可以将Notification作为后备机制。

我知道有三种主要的事件总线实现:

示例应用程序都是相同的核心应用程序,只是使用不同的事件总线实现。我使用AlarmManager来触发服务而不是GCM消息,但同样的概念适用于您使用GCM的情况。

就我个人而言,我更喜欢greenrobot的EventBus,以获得更灵活的线程选项,但这三种选项都适用于您的情况。