如何发送自定义消息

在 RTCRoom 中发送自定义消息(前提是用户都在 RTCRoom 中)

发送端

  1. 继承 MessageContent 生成自定义消息类

    示例代码:注意,flag 必须指定为 MessageTag.STATUS

    @MessageTag(value = "SealRTC:SetRTCRoom", flag = MessageTag.STATUS)
    public class RTCRoomMessage extends MessageContent {
    
        private String userId;
    
        public String getUserId() {
            return userId;
        }
    
        public void setUserId(String userId) {
            this.userId = userId;
        }
    
        public int getType() {
            return type;
        }
    
        public void setType(int type) {
            this.type = type;
        }
    
        private int type;
    
        public RTCRoomMessage(String userId, int type) {
            this.userId = userId;
            this.type = type;
        }
    
    
        public RTCRoomMessage(byte[] data) {
            try {
                JSONObject jsonObject = new JSONObject(new String(data));
                userId = jsonObject.getString("userId");
                type = jsonObject.getInt("type");
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    
        @Override
        public byte[] encode() {
            try {
                JSONObject jsonObject = new JSONObject();
                jsonObject.put("userId", userId);
                jsonObject.put("type", type);
                return jsonObject.toString().getBytes();
            } catch (JSONException e) {
                e.printStackTrace();
            }
            return new byte[0];
        }
    
        @Override
        public int describeContents() {
            return 0;
        }
    
        @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeString(userId);
            dest.writeInt(type);
        }
    
        public RTCRoomMessage(Parcel parcel) {
            userId = parcel.readString();
            type = parcel.readInt();
        }
    
        public static final Creator<RTCRoomMessage> CREATOR = new Creator<RTCRoomMessage>() {
            @Override
            public RTCRoomMessage createFromParcel(Parcel source) {
                return new RTCRoomMessage(source);
            }
    
            @Override
            public RTCRoomMessage[] newArray(int size) {
                return new RTCRoomMessage[size];
            }
        };
    }
    
  2. 在初始化的地方注册自定义消息:

    RongIMClient.registerMessageType(RTCRoomMessage.class)
    
  3. 加入房间成功后,发送自定义消息:

    rtcRoom.sendMessage(messageContent, callback)
    

接收端

  1. 实现发送端的步骤 1 和 2;

  2. 注册 IRCRTCRoomEventsListener 回调,并在 onReceiveMessage(Message) 方法中处理自定义消息,示例代码如下:

       MessageContent messageContent = message.getContent();
            if (messageContent instanceof RTCRoomMessage){
                RTCRoomMessage rtcRoomMessage = (RTCRoomMessage) messageContent;
                String userId = rtcRoomMessage.getUserId();
                int type = rtcRoomMessage.getType();
            }
    

用 IMLib 来发送自定义消息

比如您想发送会议的音视频邀请来通知用户加入会议,就需要用 IMLib 的发送消息方式,可参考开发文档