1. 程式人生 > >融雲自定義訊息注意事項

融雲自定義訊息注意事項

需要在聊天中加入自定義的訊息,比如旅遊圖片,旅遊景點,等等,這個時候融雲集成好的一些訊息體已經不夠用,官方文件上已經說明了如何去自定義,當然啦,相信你們肯定會先找一找有沒有現成寫好的,抱歉,你還是看文件吧,這裡我寫一下我遇到的坑,拿出一個我寫的例子:

如同整合文件一樣,需要先自定義訊息體

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()之後