环信2.x,参考文档和官网上的视频做的注册广播接收消息,但是接收消息要重进聊天页面,而且还有报错说Are you missing a call to unregisterReceiver.
上部分代码,全部代码在附件:
//只有注册了广播才能接收到新消息,目前离线消息,在线消息都是走接收消息的广播(离线消息目前无法监听,在登录以后,接收消息广播会执行一次拿到所有的离线消息)
NewMessageBroadcastReceiver msgReceiver = new NewMessageBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter(EMChatManager.getInstance().getNewMessageBroadcastAction());
intentFilter.setPriority(3);
registerReceiver(msgReceiver, intentFilter);
//注册消息监听之后要调用这个方法,否则会收不到消息
EMChat.getInstance().setAppInited();
class NewMessageBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 注销广播
abortBroadcast();
// 消息id(每条消息都会生成唯一的一个id,目前是SDK生成)
String msgId = intent.getStringExtra("msgid");
//发送方
String username = intent.getStringExtra("from");
// 收到这个广播的时候,message已经在db和内存里了,可以通过id获取mesage对象
EMMessage message = EMChatManager.getInstance().getMessage(msgId);
EMConversation conversation = EMChatManager.getInstance().getConversation(username);
// 如果是群聊消息,获取到group id
if (message.getChatType() == ChatType.GroupChat) {
username = message.getTo();
}
if (!username.equals(username)) {
// 消息不是发给当前会话,return
return;
}
//刷新消息
conversation.addMessage(message);
adapter.notifyDataSetChanged();
listView.setAdapter(adapter);
listView.setSelection(listView.getCount()-1); //显示最后一条消息
}
}
//只有注册了广播才能接收到新消息,目前离线消息,在线消息都是走接收消息的广播(离线消息目前无法监听,在登录以后,接收消息广播会执行一次拿到所有的离线消息)
NewMessageBroadcastReceiver msgReceiver = new NewMessageBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter(EMChatManager.getInstance().getNewMessageBroadcastAction());
intentFilter.setPriority(3);
registerReceiver(msgReceiver, intentFilter);
//注册消息监听之后要调用这个方法,否则会收不到消息
EMChat.getInstance().setAppInited();
class NewMessageBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 注销广播
abortBroadcast();
// 消息id(每条消息都会生成唯一的一个id,目前是SDK生成)
String msgId = intent.getStringExtra("msgid");
//发送方
String username = intent.getStringExtra("from");
// 收到这个广播的时候,message已经在db和内存里了,可以通过id获取mesage对象
EMMessage message = EMChatManager.getInstance().getMessage(msgId);
EMConversation conversation = EMChatManager.getInstance().getConversation(username);
// 如果是群聊消息,获取到group id
if (message.getChatType() == ChatType.GroupChat) {
username = message.getTo();
}
if (!username.equals(username)) {
// 消息不是发给当前会话,return
return;
}
//刷新消息
conversation.addMessage(message);
adapter.notifyDataSetChanged();
listView.setAdapter(adapter);
listView.setSelection(listView.getCount()-1); //显示最后一条消息
}
}
没有找到相关结果
已邀请:
1 个回复
[已注销]
http://www.easemob.com/download
看下这个链接里面的问题了。
别用广播的方式来接收消息了 ,这个是以前的老版本的 接收消息的方式了。