融雲自定義訊息注意事項
阿新 • • 發佈:2019-02-13
需要在聊天中加入自定義的訊息,比如旅遊圖片,旅遊景點,等等,這個時候融雲集成好的一些訊息體已經不夠用,官方文件上已經說明了如何去自定義,當然啦,相信你們肯定會先找一找有沒有現成寫好的,抱歉,你還是看文件吧,這裡我寫一下我遇到的坑,拿出一個我寫的例子:
如同整合文件一樣,需要先自定義訊息體
package com.xxx.xxx.CustomizeRongIM;
import android.os.Parcel;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.UnsupportedEncodingException;
import io.rong.common.ParcelUtils;
import io.rong.common.RLog;
import io.rong.imlib.MessageTag;
import io.rong.imlib.model.MentionedInfo;
import io.rong.imlib.model.MessageContent;
import io.rong.imlib.model.UserInfo;
/**
* Created by Obl on 2017/5/9.
* com.xxx.xxx.CustomizeRongIM
*/
@MessageTag(value = "XX:XXXXX" , flag = MessageTag.ISCOUNTED | MessageTag.ISPERSISTED)
public class CustomizeJoinMessage extends MessageContent {
public CustomizeJoinMessage() {
}
//給訊息賦值。
public CustomizeJoinMessage(Parcel in) {
setUserInfo(ParcelUtils.readFromParcel(in, UserInfo.class));
setMentionedInfo(ParcelUtils.readFromParcel(in, MentionedInfo.class));
}
/**
* 將類的資料寫入外部提供的 Parcel 中。
*
* @param dest 物件被寫入的 Parcel。
* @param flags 物件如何被寫入的附加標誌。
*/
@Override
public void writeToParcel(Parcel dest, int flags) {
ParcelUtils.writeToParcel(dest, this.getUserInfo());
ParcelUtils.writeToParcel(dest, this.getMentionedInfo());
}
public CustomizeJoinMessage(byte[] data) {
String jsonStr = null;
try {
jsonStr = new String(data, "UTF-8");
} catch (UnsupportedEncodingException var5) {
var5.printStackTrace();
}
try {
JSONObject e = new JSONObject(jsonStr);
if (e.has("user")) {
this.setUserInfo(this.parseJsonToUserInfo(e.getJSONObject("user")));
}
if (e.has("mentionedInfo")) {
this.setMentionedInfo(this.parseJsonToMentionInfo(e.getJSONObject("mentionedInfo")));
}
} catch (JSONException var4) {
RLog.e("CustomizeJoinMessage", jsonStr + "JSONException " + var4.getMessage());
}
}
/**
* 讀取介面,目的是要從Parcel中構造一個實現了Parcelable的類的例項處理。
*/
public static final Creator<CustomizeJoinMessage> CREATOR = new Creator<CustomizeJoinMessage>() {
@Override
public CustomizeJoinMessage createFromParcel(Parcel source) {
return new CustomizeJoinMessage(source);
}
@Override
public CustomizeJoinMessage[] newArray(int size) {
return new CustomizeJoinMessage[size];
}
};
/**
* 描述了包含在 Parcelable 物件排列資訊中的特殊物件的型別。
*
* @return 一個標誌位,表明Parcelable物件特殊物件型別集合的排列。
*/
public int describeContents() {
return 0;
}
@Override
public byte[] encode() {
JSONObject jsonObj = new JSONObject();
try {
if (this.getJSONUserInfo() != null) {
jsonObj.putOpt("user", this.getJSONUserInfo());
}
if (this.getJsonMentionInfo() != null) {
jsonObj.putOpt("mentionedInfo", this.getJsonMentionInfo());
}
} catch (JSONException var4) {
RLog.e("CustomizeJoinMessage", "JSONException " + var4.getMessage());
}
try {
return jsonObj.toString().getBytes("UTF-8");
} catch (UnsupportedEncodingException var3) {
var3.printStackTrace();
return null;
}
}
}
這裡需要注意的是enCode 和 帶有byte 的構造方法一定要寫,,檢視原始碼你會發現每個訊息都含有這幾個方法。
package com.xxx.xxx.CustomizeRongIM;
import android.content.Context;
import android.text.Spannable;
import android.text.SpannableString;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import com.xxx.xxx.R;
import com.xxx.xxx.event.AddNewOneEvent;
import com.xxx.xxx.utils.DensityUtils;
import org.greenrobot.eventbus.EventBus;
import io.rong.imkit.model.ProviderTag;
import io.rong.imkit.model.UIMessage;
import io.rong.imkit.widget.provider.IContainerItemProvider;
/**
* Created by Obl on 2017/5/9.
* com.xxx.xxx.CustomizeRongIM
*/
@ProviderTag(messageContent = CustomizeJoinMessage.class, showPortrait = false, centerInHorizontal = true, showSummaryWithName = false)
public class CustomizeJoinMessageItemProvider extends IContainerItemProvider.MessageProvider<CustomizeJoinMessage> {
class ViewHolder {
LinearLayout llJoin;
}
@Override
public View newView(Context context, ViewGroup group) {
View view = LayoutInflater.from(context).inflate(R.layout.item_customize_join_message, group, false);
ViewHolder holder = new ViewHolder();
holder.llJoin = (LinearLayout) view.findViewById(R.id.llJoin);
holder.llJoin.getLayoutParams().width = DensityUtils.getScreenWidth(context);
view.setTag(holder);
return view;
}
@Override
public void bindView(View view, int position, CustomizeJoinMessage content, UIMessage message) {
}
@Override
public Spannable getContentSummary(CustomizeJoinMessage data) {
return new SpannableString("建立家庭組成功");
}
@Override
public void onItemClick(View view, int i, CustomizeJoinMessage customizeBPMessage, UIMessage uiMessage) {
EventBus.getDefault().post(new AddNewOneEvent());
}
@Override
public void onItemLongClick(View view, int i, CustomizeJoinMessage customizeBPMessage, UIMessage uiMessage) {
}
}
如果你比較懶,,你可以去看看
這裡已經寫好了很多原生的,,你可以修修改改,,
對了,別忘記註冊在init()之後