android 环信怎么接收透传消息

2025年03月23日 06:34
有1个网友回答
网友(1):

注册透传消息广播如下:
// 透传广播
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);
}

}
}