实现基于OPhone 2.0的GTalk客户端
2010-10-19 20:56:29 来源:WEB开发网}
}
}
public void setOnMessageListener(OnMessageListener listener)
{
mOnMessageListener = listener;
}
}
在编写MessageReceiver类时需要注意如下两点。
MessageReceiver和UpdateContactState一样,并不直接处理聊天消息,而是通过调用一个processMessage事件方法进行处理。
获得聊天消息要通过PacketCollector.nextResult方法。如果当前没有聊天消息,nextResult方法会被阻塞。
有两个地方需要接收消息。一个是在聊天界面(ChatRoom类),另一个是在联系人列表界面(GTalk类)。在ChatRoom类中接收到消息后会直接显示在聊天记录中(EditText组件),代码如下:
复制到剪贴板 Java代码
@Override
public void processMessage(Message message)
{
metMessageList.append(GTalk.mUtil.getLeftString(from, "/") + ": ");
metMessageList.append(msg + " ");
}
GTalk 类处理聊天消息的过程要复杂一些。当第一次接收到某个联系人的聊天消息后,会自动显示聊天界面。如果再次接收到该联系人的聊天消息时,就不再显示与该联系人聊天的界面了。而在显示聊天界面时,会将聊天消息和联系人的帐号传入聊天界面。在聊天界面(ChatRoom类)的onCreate方法中会将第一次的聊天消息添加到聊天记录中。GTalk类中接收聊天消息的事件方法如下:
复制到剪贴板 Java代码
public void processMessage(Message message)
{
String account = mUtil.getLeftString(message.getFrom(), "/");
// 是否第一次接到该联系人的聊天消息
Boolean isChatting = mChattingContactMap.get(account);
// 是第一次接收到该联系人的聊天消息
if (isChatting == null)
{
isChatting = false;
}
// 设置标志,表示已不再是第一次接收到该联系人的聊天消息
mChattingContactMap.put(account, true);
// 是第一次接收到该联系人的聊天消息
if (!isChatting)
{
// 显示聊天界面
Intent intent = new Intent(this, ChatRoom.class);
更多精彩
赞助商链接