注册

Android 退出环信后,再次登录,无法收到透传消息

 
就是开始登录一个用户,可以收到透传消息,可是退出后(没有关闭程序),再次登录,就收不到透传消息了,这是怎么回事?
 
退出登录环信代码如下:
 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);
            }
            
        }
    }
 
 
已邀请:

lzan13 - 慢慢来,一步一个脚印?

可以看下你的setAppInited方法是否有再次调用

要回复问题请先登录注册