融云集成单聊与会话列表( 三 )


/*** 融云链接状态监听*/RongIM.setConnectionStatusListener(new RongYunConnectionStatusListener(this));
这样对设备与融云服务器的链接状态进行了监听,当出现上面的几种状态,便对应进行逻辑处理 。
10.发送信息监听
在进行会话的过程中,有时候需要对发送消息的结果进行捕获,这时候应该实现的是
public class RongYunSendMessageListener implements RongIM.OnSendMessageListener {private Context context;public RongYunSendMessageListener(BaseApplication context) {this.context = context;}@Overridepublic Message onSend(Message message) {return message;}@Overridepublic boolean onSent(Message message, RongIM.SentMessageErrorCode sentMessageErrorCode) {if(message.getSentStatus()== Message.SentStatus.FAILED){if(sentMessageErrorCode== RongIM.SentMessageErrorCode.NOT_IN_CHATROOM){//不在聊天室}else if(sentMessageErrorCode== RongIM.SentMessageErrorCode.NOT_IN_DISCUSSION){//不在讨论组}else if(sentMessageErrorCode== RongIM.SentMessageErrorCode.NOT_IN_GROUP){//不在群组}else if(sentMessageErrorCode== RongIM.SentMessageErrorCode.REJECTED_BY_BLACKLIST){//你在他的黑名单中}else{ToastUtil.shortToast(context,"与服务器失去链接,请重新登录");}}return false;}}
/*** 融云发送消息监听*/RongIM.getInstance().setSendMessageListener(new RongYunSendMessageListener(this));
这样对消息发送进行了监听,当出现上面的几种状态,便对应进行逻辑处理 。
11.会话列表刷新头像
在跳转会话列表界面时,可以先进行一次,因为在刷新会话列表的时候需要保证与融云服务器链接正常 。
/*** 更新会话列表头像和标题*/RongIM.getInstance().getConversationList(new RongIMClient.ResultCallback>() {@Overridepublic void onSuccess(List conversations) {if (conversations == null || conversations.size() <= 0){return;}for (int i = 0 ; i < conversations.size() ; i ++){Conversation conversation = conversations.get(i);if (conversation != null){//这里通过token 和useid在我们自己服务器请求用户信息mPresenter.GetUserInfo(token,conversation.getTargetId());}}}@Overridepublic void onError(RongIMClient.ErrorCode errorCode) {}});
io.rong.imlib.model.UserInfo userInfo = new io.rong.imlib.model.UserInfo(result.getPhone(),result.getName(),Uri.parse(result.getImg()));RongIM.getInstance().refreshUserInfoCache(userInfo);
通过这样设置后,会话列表会自动获取最新的用户信息,显示在会话列表上 。
12.会话列表界面操作监听
private class MyConversationListBehaviorListener implements RongIM.ConversationListBehaviorListener{/*** 当点击会话头像后执行 。** @param context上下文 。* @param conversationType 会话类型 。* @param targetId被点击的用户id 。* @return 如果用户自己处理了点击后的逻辑处理,则返回 true,否则返回 false,false 走融云默认处理方式 。*/boolean onConversationPortraitClick(Context context, Conversation.ConversationType conversationType, String targetId){ToastUtils.shorttoast(context,"跳转到用户详情");}/*** 当长按会话头像后执行 。** @param context上下文 。* @param conversationType 会话类型 。* @param targetId被点击的用户id 。* @return 如果用户自己处理了点击后的逻辑处理,则返回 true,否则返回 false,false 走融云默认处理方式 。*/boolean onConversationPortraitLongClick(Context context, Conversation.ConversationType conversationType, String targetId){return false;}/*** 长按会话列表中的 item 时执行 。** @param context上下文 。* @param view触发点击的 View 。* @param uiConversation 长按时的会话条目 。* @return 如果用户自己处理了长按会话后的逻辑处理,则返回 true,否则返回 false,false 走融云默认处理方式 。*/@Overridepublic boolean onConversationLongClick(Context context, View view, UIConversation uiConversation) {return false;}/*** 点击会话列表中的 item 时执行 。** @param context上下文 。* @param view触发点击的 View 。* @param uiConversation 会话条目 。* @return 如果用户自己处理了点击会话后的逻辑处理,则返回 true,否则返回 false,false 走融云默认处理方式 。*/@Overridepublic boolean onConversationClick(Context context, View view, UIConversation uiConversation) {return false;}}