问题描述
就是开始登录一个用户,可以收到透传消息,可是退出后(没有关闭程序),再次登录,就收不到透传消息了,这是怎么回事? 退出登录环信代码如下: EMChatManager.getInstance().logout(new EMCallBack() { @Override public void onSuccess() { startActivity(new Intent(getActivity(), LoginActivity.class)); } @Override public void onProgress(int progress, String status) { } @Override public void onError(int code, String error) { } });注册透传消息广播如下:// 透传广播 IntentFilter cmdIntentFilter = new IntentFilter(EMChatManager.getInstance().getCmdMessageBroadcastAction()); CMDBroadcastReceiver cmdMessageReceiver = new CMDBroadcastReceiver(); appContext.registerReceiver(cmdMessageReceiver, cmdIntentFilter); 发送透传消息如下:EMMessage cmdMsg = EMMessage.createSendMessage(EMMessage.Type.CMD);// 透传消息 //支持单聊和群聊,默认单聊,如果是群聊添加下面这行 // cmdMsg.setChatType(ChatType.GroupChat); //action可以自定义,在广播接收时可以收到 CmdMessageBody cmdBody = new CmdMessageBody(action); cmdMsg.addBody(cmdBody); // 给自己的好友发送通知 if (IMHelper.getInstance().getImUserList() != null && IMHelper.getInstance().getImUserList().size() > 0) { for(IMUser imUser:IMHelper.getInstance().getImUserList()){ if(!imUser.getUid().equals(curUsername)){// 不给自己发送这条消息 cmdMsg.setReceipt(imUser.getUid());// 接收这条通知的人id cmdMsg.setAttribute("ToUsername",curUsername);// 需要修改当前用户的头像id cmdMsg.setAttribute(key,obj);//支持自定义扩展 sendCMDMessage(cmdMsg); } } }private static void sendCMDMessage(EMMessage cmdMsg){ EMChatManager.getInstance().sendMessage(cmdMsg,new EMCallBack() { @Override public void onSuccess() { // 发送成功 } @Override public void onProgress(int arg0, String arg1) { // 发送进度 } @Override public void onError(int arg0, String arg1) { // 发送失败 } }); } 接收透传的广播如下:public class CMDBroadcastReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Log.d("ME", "进入到广播啦"); if(intent!=null){ //获取cmd message对象 String msgId = intent.getStringExtra("msgid"); EMMessage message = intent.getParcelableExtra("message"); //获取消息body CmdMessageBody cmdMsgBody = (CmdMessageBody) message.getBody(); String aciton = cmdMsgBody.action;//获取自定义action if(IMConstants.ACTION_UPDATE_USER_AVATAR.equals(aciton)){// 更新头像指令 updateAvatar(message); }else if(IMConstants.ACTION_UPDATE_USER_NICK.equals(aciton)){// 更新昵称 updateNick(message); } } }
解决方案
可以看下你的setAppInited方法是否有再次调用