刚刚接到这个需求,感受应该特别简单,看了下,网上有例子,可是说的不是特别详细,在官网上看了一下,而后总结了一下,终于也是被搞定,android

不得不说官网也是比较坑,官网上给的例子的一些方法好多都已通过期了,一开始写的时候,发现长按事件以后怎么也出发不了回调,后来找到了融云官方的jdk,才发现已通过期了,新的融云列表事件监听用的是ide

RongIM.setConversationListBehaviorListener();

一共有四个回调方法分别是:布局

头像点击事件ui

@Override

public boolean onConversationPortraitClick(Context context, Conversation.ConversationType conversationType, String s) {

return false;

}

spa

头像长按事件xml

@Override

public boolean onConversationPortraitLongClick(Context context, Conversation.ConversationType conversationType, String s) {

return false;

}

对象

消息点击事件blog

@Override

public boolean onConversationClick(Context context, View view, UIConversation uiConversation) {

return false;

}

事件

消息长按事件utf-8

@Override

public boolean onConversationLongClick(final Context context, View view, final UIConversation uiConversation) {

return false;

}

咱们须要处理的就是onConversationLongClick()方法,首先把返回值更改成true,调用的时候就会调用咱们自定义的弹框,而不是融云提供的

首先咱们须要先自定好弹窗代码以下:

/*聊天浮层*/public static voidChatshow(finalContext mContext,String title,finalOnFloatingLayerClickLisenter onOKClickLisenter) {

AlertDialog.Builder builder = newAlertDialog.Builder(mContext);finalAlertDialog alertDialog = builder.create();alertDialog.show();alertDialog.getWindow().setContentView(R.layout.chatlist_dia);TextView closeBtn = (TextView) alertDialog.getWindow().findViewById(R.id.btn_delete);TextView upgradeText = (TextView) alertDialog.getWindow().findViewById(R.id.nomsg);upgradeText.setText(title);upgradeText.setOnClickListener(newView.OnClickListener() {

@Overridepublic voidonClick(View v) {

alertDialog.dismiss();onOKClickLisenter.onOkClick();}

});closeBtn.setOnClickListener(newView.OnClickListener() {

@Overridepublic voidonClick(View view) {

alertDialog.dismiss();onOKClickLisenter.onDismiss();}

});alertDialog.setCancelable(true);alertDialog.setCanceledOnTouchOutside(true);alertDialog.show();}

布局文件:

效果图就是这样子:

接下来咱们须要在长按事件中处理咱们的操做了,首先第一步,咱们须要获取到当前消息是否免打扰

RongIM.getInstance().getConversationNotificationStatus(Conversation.ConversationType.PRIVATE,

uiConversation.getConversationTargetId(), new RongIMClient.ResultCallback() {

@Override

public void onSuccess(final Conversation.ConversationNotificationStatus conversationNotificationStatus) {

}

@Override

public void onError(RongIMClient.ErrorCode errorCode) {

}

});

成功以后返回了一个conversationNotificationStatus对象,这个对象是干吗用的呢,里面就包含了当前的是否免打扰的信息,他有一个getvalue()方法,返回值是一个int型的,1=未开启免打扰,0=开启免扰,也就是说是1的时候点击出现弹窗显示的是开启免打扰,0的时候关闭免打扰。可是此处有一个小坑就是,你获取到这个值以后,点击设置免打扰,会发现无效,先来看看若是设置免打扰的方法吧;

RongIM.getInstance().setConversationNotificationStatus(Conversation.ConversationType.PRIVATE,

uiConversation.getConversationTargetId(), conversationNotificationStatus1, new RongIMClient.ResultCallback() {

@Override

public void onSuccess(Conversation.ConversationNotificationStatus conversationNotificationStatus) {

showToast("设置成功");

}

@Override

public void onError(RongIMClient.ErrorCode errorCode) {

showToast("设置失败");

}

});

调用此方法后会发现结果一直不变,这是为何呢;后来查看了源码以后,才发现融云会把conversationNotificationStatus对象里面的getValue()的值拿出来,可是值一直都是1,因此会没有效果,此时此刻或许你就会明白了,我们能够手动给他设置,

这个对象既然有gevalue方法,那么久会有setvalue方法,并且这个方法又会返回一个conversationNotificationStatus对象,因而咱们再把这个对象设置进去,运行代码,ok没问题啦。贴出此处总体代码吧:

RongIM.getInstance().getConversationNotificationStatus(Conversation.ConversationType.PRIVATE,uiConversation.getConversationTargetId(), newRongIMClient.ResultCallback() {

@Overridepublic voidonSuccess(finalConversation.ConversationNotificationStatus conversationNotificationStatus) {

final intvalue = conversationNotificationStatus.getValue();String title;finalConversation.ConversationNotificationStatus conversationNotificationStatus1;if(value==1){

conversationNotificationStatus1=conversationNotificationStatus.setValue(0);title="免打扰";}else{

conversationNotificationStatus1=conversationNotificationStatus.setValue(1);title="取消免打扰";}

AgreementDialog.Chatshow(context,title, newOnFloatingLayerClickLisenter() {

@Overridepublic voidonOkClick() {

RongIM.getInstance().setConversationNotificationStatus(Conversation.ConversationType.PRIVATE,uiConversation.getConversationTargetId(),conversationNotificationStatus1, newRongIMClient.ResultCallback() {

@Overridepublic voidonSuccess(Conversation.ConversationNotificationStatus conversationNotificationStatus) {

showToast("设置成功");}

@Overridepublic voidonError(RongIMClient.ErrorCode errorCode) {

showToast("设置失败");}

});}

@Overridepublic voidonDismiss() {

RongIM.getInstance().getRongIMClient().removeConversation(Conversation.ConversationType.PRIVATE,uiConversation.getConversationTargetId(), newRongIMClient.ResultCallback() {

@Overridepublic voidonSuccess(Boolean aBoolean) {

showToast("删除成功");}

@Overridepublic voidonError(RongIMClient.ErrorCode errorCode) {

showToast("删除失败");}

});}

});}

@Overridepublic voidonError(RongIMClient.ErrorCode errorCode) {

}

});好了,这个功能到这里也就结束了,仍是比较简单的,可是没作过的,可能就会采一些坑,但愿这篇博客会对大家开发有帮助。

更多推荐

android融云自定义通知,android融云消息免打扰