IM消息透传

弯路:之前用的不是单聊和群聊的消息,都用的是消息发送Txt格式,里面价格setAttribute来判断是什么动作,但是在MainActivity里面获取会话的时候,这些动作数都加上了,所以使用透传加以区分


透传消息能做什么:头像,昵称的更新等,可以把透传消息理解为一条指令,通过发送这条指令给对方,告诉对方要做的action,收到消息可以自定义处理的一种消息。(透传消息不会存入本地数据库中,所以在UI上是不会显示的)


发送方:

EMMessage cmdMsg = EMMessage.createSendMessage(EMMessage.Type.CMD);
//支持单聊和群聊,默认单聊,如果是群聊添加下面这行
cmdMsg.setChatType(ChatType.Chat);
String action="Posting";//action可以自定义,在广播接收时可以收到
CmdMessageBody cmdBody=new CmdMessageBody(action);
cmdMsg.setReceipt(frist_floor_dd_id);//发送给某个人
cmdMsg.setAttribute("Posting", js_info);//将动态信息发送给对方
cmdMsg.setAttribute("PostingMsg", "PostingMsg");//将动态信息发送给对方
cmdMsg.addBody(cmdBody); 
EMChatManager.getInstance().sendMessage(cmdMsg, new EMCallBack(){


@Override
public void onError(int arg0, String arg1) {
}


@Override
public void onProgress(int arg0, String arg1) {

}


@Override
public void onSuccess() {
}

});



接收方:

在MainActivity里面的onResum()注册监听:

     //-----------------------------CMD消息广播监听------------------------------
        IntentFilter cmdIntentFilter = new IntentFilter(EMChatManager.getInstance().getCmdMessageBroadcastAction());
    registerReceiver(cmdMessageReceiver, cmdIntentFilter);


在onStop()的时候,取消监听:

//-----------------------------CMD消息广播监听停止------------------------
  

  unregisterReceiver(cmdMessageReceiver);


在方法里面的监听,判断antion的值,来判定是什么动作:(收到的信息,在数据库里面设置这个信息为未读,然后更新MainActivity和会话页面)

/**
* cmd消息BroadcastReceiver
*/
private BroadcastReceiver cmdMessageReceiver = new BroadcastReceiver() {
 
@Override
public void onReceive(Context context, Intent intent) {
try {
//获取cmd message对象
String msgId = intent.getStringExtra("msgid");
EMMessage message = intent.getParcelableExtra("message");
System.out.println("-------cmdMessageReceiver:"+"cmdMessageReceiver"+","+msgId+","+message.getBody().toString());
// -------cmdMessageReceiver:cmdMessageReceiver,183722420031455808,cmd:"Posting"
//获取消息body
CmdMessageBody cmdMsgBody = (CmdMessageBody) message.getBody();
String aciton = cmdMsgBody.action;//获取自定义action
System.out.println("-------------aciton:"+aciton);
// -------------aciton:Posting
if(aciton.trim().equals("Posting")){
//获取扩展属性
if(message.getStringAttribute("PostingMsg","").trim().equals("PostingMsg")){
if(!message.getStringAttribute("Posting","").trim().equals("")){//贴子消息 
System.out.println("-------------------re:"+"re0");
JSONObject post_js=message.getJSONObjectAttribute("Posting");
String unReadStatus="8";//8 未读,9已读
Boolean issuccess=SqlLiteDBManager.getManager().InsertPostingMessage(post_js,unReadStatus);
if(issuccess){
System.out.println("-------------------re:"+"re1");
if (MobileApplication.recentChatFlag) {// 聊天界面的消息
android.os.Message msg1 = RecentChatActivity.rhandler.obtainMessage();
msg1.what = 10;
msg1.sendToTarget();
}

if(MobileApplication.mainacflag){//未读消息提示
updateUnreadLabel();
new UpdateUnreadMsg().execute("");
}

}
}
}

}



} catch (EaseMobException e) {
System.out.println("-------cmd:"+e.toString());
e.printStackTrace();
}
}
};


adapter的判断:(设置已读,如果点击该动作,那么这个消息全部设置为已读,更新会话页面还有MainActivity)

 

   viewHolder.chat_layout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// SqlLiteDBManager.getManager().UpdatePostingRead(entity.getSqlite_id());//将贴子消息设为已读
SqlLiteDBManager.getManager().UpdatePostingAllRead();//将贴子消息设为已读
entity.setPosting_read_status("0");
entity.setPosting_unread_count("0");
RecentChatActivity.rca.recentChatAdapter.notifyDataSetChanged();

MainActivity.mainA.refreshUnreadMsg();

Intent i=new Intent(ctx,PostingMessageActivity.class);
ctx.startActivity(i);

}
});


设置全部已读:

/**
* 改变消息的读取状态
*/
public void UpdatePostingAllRead(){
ContentValues Values_update=new ContentValues();
Values_update.put("posting_read_status",0);
Values_update.put("unReadStatus",9);
<span style="background-color: rgb(204, 102, 204);">String whereClause="1==1";
String[] whereArgs={};</span>
UpdateValue(posting_replyTablename, Values_update, whereClause, whereArgs);
}




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
IM消息列表的实现可以使用Java语言来完成。下面是一个简单的示例代码: 首先,可以创建一个Message类来表示每条消息的内容和属性,例如发送者、接收者、时间等等。示例代码如下: ```java public class Message { private String sender; private String receiver; private String content; private Date time; // 构造方法 public Message(String sender, String receiver, String content, Date time) { this.sender = sender; this.receiver = receiver; this.content = content; this.time = time; } // getter和setter方法 // ... } ``` 然后,可以创建一个IM消息列表类IMMessageList,用来管理、存储和操作消息列表。示例代码如下: ```java import java.util.ArrayList; import java.util.List; public class IMMessageList { private List<Message> messageList; public IMMessageList() { messageList = new ArrayList<>(); } // 添加消息 public void addMessage(Message message) { messageList.add(message); } // 删除消息 public void deleteMessage(Message message) { messageList.remove(message); } // 获取消息列表 public List<Message> getMessageList() { return messageList; } // 其他操作,例如按照时间排序、根据发送者或接收者查询等等 // ... } ``` 使用该IMMessageList类,可以实现IM消息列表的功能。例如,可以通过调用addMessage方法添加新的消息,调用getMessageList方法获取当前的消息列表,调用deleteMessage方法删除指定的消息等等。 这只是一个简单的实现示例,实际应用中可能需要更多的功能和细节处理。希望这个简单的示例能够帮助你理解如何实现IM消息列表的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值