注册

环信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);    //显示最后一条消息
        }
    }
已邀请:
这个现在都是用方法事件注册的接收消息,建议下载个开源的 demo.
http://www.easemob.com/download
看下这个链接里面的问题了。
别用广播的方式来接收消息了 ,这个是以前的老版本的 接收消息的方式了。

要回复问题请先登录注册