您的位置:首页 > 其它

融云消息自定义

2018-04-03 11:37 78 查看
1、继承 MessageContent新建一自定义消息类,继承 MessageContent 如下面示例代码:public class CustomizeMessage extends MessageContent {
private String content;//消息属性,可随意定义
}2、重写和实现方法实现 
encode()
 方法,该方法的功能是将消息属性封装成 
json
 串,再将 
json
 串转成 
byte
 数组,该方法会在发消息时调用,如下面示例代码:@Override
public byte[] encode() {
JSONObject jsonObj = new JSONObject();

try {
jsonObj.put("content", "这是一条消息内容");
} catch (JSONException e) {
Log.e("JSONException", e.getMessage());
}

try {
return jsonObj.toString().getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

return null;
}覆盖父类的 
MessageContent(byte[] data)
 构造方法,该方法将对收到的消息进行解析,先由 
byte
 转成 
json
 字符串,再将 
json
 中内容取出赋值给消息属性。public CustomizeMessage(byte[] data) {
String jsonStr = null;

try {
jsonStr = new String(data, "UTF-8");
} catch (UnsupportedEncodingException e1) {

}

try {
JSONObject jsonObj = new JSONObject(jsonStr);

if (jsonObj.has("content"))
content = jsonObj.optString("content");

} catch (JSONException e) {
RLog.e(this, "JSONException", e.getMessage());
}

}
MessageContent
 已实现 
Parcelable
 接口,下面需要实现 
Parcelable
 中的方法://给消息赋值。
public CustomizeMessage(Parcel in) {
content=ParcelUtils.readFromParcel(in);//该类为工具类,消息属性
...
//这里可继续增加你消息的属性
}

/**
* 读取接口,目的是要从Parcel中构造一个实现了Parcelable的类的实例处理。
*/
public static final Creator<CustomizeMessage> CREATOR = new Creator<CustomizeMessage>() {

@Override
public CustomizeMessage createFromParcel(Parcel source) {
return new CustomizeMessage(source);
}

@Override
public CustomizeMessage[] newArray(int size) {
return new CustomizeMessage[size];
}
};

/**
* 描述了包含在 Parcelable 对象排列信息中的特殊对象的类型。
*
* @return 一个标志位,表明Parcelable对象特殊对象类型集合的排列。
*/
public int describeContents() {
return 0;
}

/**
* 将类的数据写入外部提供的 Parcel 中。
*
* @param dest 对象被写入的 Parcel。
* @param flags 对象如何被写入的附加标志。
*/
@Override
public void writeToParcel(Parcel dest, int flags) {
ParcelUtils.writeToParcel(dest, content);//该类为工具类,对消息中属性进行序列化
...
//这里可继续增加你消息的属性
}3、增加注解信息注解名:MessageTag ;属性:value ,flag; value 即 ObjectName 是消息的唯一标识不可以重复,开发者命名时不能以 RC 开头,避免和融云内置消息冲突;flag 是用来定义消息的可操作状态。如下面代码段,自定义消息名称 
CustomizeMessage
 ,vaule 是 
app:custom
 ,flag 是 
MessageTag.ISCOUNTED
 | 
MessageTag.ISPERSISTED
 表示消息计数且存库。@MessageTag(value = "app:custom", flag = MessageTag.ISCOUNTED | MessageTag.ISPERSISTED)
public class CustomizeMessage extends MessageContent {
...
}
flag
 值如下表:
枚举值说明
MessageTag.NONE
为空值,不表示任何意义,发送的自定义消息不会在会话页面和会话列表中展示。
MessageTag.ISCOUNTED
表示客户端收到消息后,要进行未读消息计数(未读消息数增加 1),所有内容型消息都应该设置此值。非内容类消息暂不支持消息计数。
MessageTag.ISPERSISTED
表示客户端收到消息后,要进行存储,并在之后可以通过接口查询,存储后会在会话界面中显示。
4、注册自定义消息自定义消息应在 
init
 后注册,代码如下:RongIM.registerMessageType(CustomizeMessage.class);这些基本都是官网上的内容:
特意附上官网地址:
融云官网地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  融云