刚刚接到这个需求,感受应该特别简单,看了下,网上有例子,可是说的不是特别详细,在官网上看了一下,而后总结了一下,终于也是被搞定,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融云消息免打扰
发布评论