我正在进行聊天活动,将消息发送到我的服务器,然后我的服务器发送给GCM。 GCM发回,我的GcmBroadcastReceiver捕获它。当我捕获消息时,我在android中显示通知。
如果我正在与某人交谈并收到消息,我只想在该活动中显示新消息,但我不知道该怎么做。我正在尝试为我的公司做类似WhatsApp的事情,我们不想使用付费服务。
我试图在我的GCMIntentService中创建一个Activity但是没有工作:
private void sendNotification(String msg) {
Intent intent = new Intent(this,
ChatActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(intent);
}
知道如何获取当前活动并显示包含新消息的新行?我可以获取当前活动以将新字符串放入我的列表中吗?
提前致谢。
答案 0 :(得分:2)
实际上比简单地开始活动要复杂一点。
假设用户当前正在查看具有聊天消息列表的活动。当推送通知到达时,您必须以某种方式通知该活动有新聊天消息并将其添加到现有聊天消息列表中。这是Android中的一个常见问题,您需要让代码的一部分与代码的另一部分进行通信,这部分代码不会或不一定会相互引用。
有几种方法可以解决这个问题。根据您实际需要编写的代码量,最简单的解决方案之一可能是实现您自己的LocalBroadcast
。这种方式的工作方式是将聊天活动注册为某个事件的监听器,例如“new_chat_message_received”。当您的GcmBroadcastReceiver收到新聊天消息的通知时,它将在本地重新广播它,结果,您的活动将被通知该事件。一旦发生这种情况,您的所有活动都必须将此新聊天消息添加到已有的聊天消息列表中。
如果您正在寻找有关如何实现这一点的详细信息,您可以查看本教程,其中有一个关于LocalBroadcasts(http://www.vogella.com/articles/AndroidBroadcastReceiver/article.html#ownreceiver_localbroadcastmanager)的特殊部分,或者您也可以在StackOverflow上查看这个答案也很好解释如何编码LocalBroadcast(how to use LocalBroadcastManager?)
的工作