问题描述
上部分代码,全部代码在附件://只有注册了广播才能接收到新消息,目前离线消息,在线消息都是走接收消息的广播(离线消息目前无法监听,在登录以后,接收消息广播会执行一次拿到所有的离线消息) 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); //显示最后一条消息 } }
解决方案
这个现在都是用方法事件注册的接收消息,建议下载个开源的 demo.http://www.easemob.com/download看下这个链接里面的问题了。别用广播的方式来接收消息了 ,这个是以前的老版本的 接收消息的方式了。