融云利用自定义消息的方式发送自定义表情
来源:互联网 发布:百度云盘mac版下载 编辑:程序博客网 时间:2024/05/24 05:00
1,自定义消息应在 init
后注册:
RongIM.registerMessageType(CustomizeMessage.class);
RongIM.getInstance().registerMessageTemplate(new ZdyMessageProvider());
2,新建 CustomizeMessage 类继承 MessageContent,附上此类代码:@MessageTag(value = "app:custom", flag = MessageTag.ISCOUNTED | MessageTag.ISPERSISTED)public class CustomizeMessage extends MessageContent { private String content;//消息属性,可随意定 public CustomizeMessage(String content){ this.content=content; } @Override public byte[] encode() { JSONObject jsonObj = new JSONObject(); try { jsonObj.put("content",content); } catch (JSONException e) { Log.e("JSONException", e.getMessage()); } try { return jsonObj.toString().getBytes("UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return null; } 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) { Log.e("TAG", e.getMessage()); } } //给消息赋值。 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);//该类为工具类,对消息中属性进行序列化 //这里可继续增加你消息的属性 } public String getContent() { return content; }}3,新建ZdyMessageProvider 类继承IContainerItemProvider.MessageProvider<CustomizeMessage>:
@ProviderTag(messageContent = CustomizeMessage.class)public class ZdyMessageProvider extends IContainerItemProvider.MessageProvider<CustomizeMessage> {private Context con;
private int[] mDatas = new int[]{R.drawable.f000, R.drawable.f001, R.drawable.f002, R.drawable.f003, R.drawable.f004, R.drawable.f005};private String []bq={"[表情1]","[表情2]","[表情3]","[表情4]","[表情5]","[表情6]"};private int[] imageIds =new int[6]; class ViewHolder { ImageView message; } @Override public View newView(Context context, ViewGroup group) { View view = LayoutInflater.from(context).inflate(R.layout.item, null); ViewHolder holder = new ViewHolder(); holder.message = (ImageView) view.findViewById(R.id.text); view.setTag(holder); con=context; return view; }@Overridepublic void bindView(View view, int i, CustomizeMessage customizeMessage, UIMessage uiMessage) { ViewHolder holder= (ViewHolder) view.getTag(); if(uiMessage.getMessageDirection()== Message.MessageDirection.SEND){ String strr=customizeMessage.getContent(); for(int j=0;j<bq.length;j++){ if(strr.equals(bq[j])) holder.message.setBackgroundResource(mDatas[j]);} }else { String strr=customizeMessage.getContent(); for(int k=0;k<bq.length;k++){ if(strr.equals(bq[k])) holder.message.setBackgroundResource(mDatas[k]);} }} @Override public Spannable getContentSummary(CustomizeMessage data) { return new SpannableString(data.getContent());//自定义的消息内容展示 } @Override public void onItemClick(View view, int i, CustomizeMessage customizeMessage, UIMessage uiMessage) { } @Override public void onItemLongClick(final View view, int i, final CustomizeMessage customizeMessage
, final UIMessage uiMessage) {//长按删除事件
4,点击表情时发送一条自定义的消息,这个方法需要在自定义的表情tab页调用String[] items1;//删除 items1 = new String[]{view.getContext().getResources().getString(io.rong.imkit.R.string.rc_dialog_item_message_delete)}; OptionsPopupDialog.newInstance(view.getContext(), items1).setOptionsPopupDialogListener(new OptionsPopupDialog.OnOptionsItemClickedListener() { public void onOptionsItemClicked(int which) { if (which == 0) { RongIM.getInstance().deleteMessages(new int[]{uiMessage.getMessageId()}, (RongIMClient.ResultCallback) null); } } }).show();}}
private void sendzdymessage(int position,String groupId) { CustomizeMessage c= new CustomizeMessage(bq[position]); byte[] b=c.encode(); CustomizeMessage mes=new CustomizeMessage(b); Message myMessage = Message.obtain(groupId, Conversation.ConversationType.GROUP, mes); RongIM.getInstance().sendMessage(myMessage,"cc",null, new IRongCallback.ISendMessageCallback() { @Override public void onAttached(Message message) { //消息本地数据库存储成功的回调 Log.e("TAG",message.toString()); } @Override public void onSuccess(Message message) { //消息通过网络发送成功的回调 Log.e("TAG",message.toString()); } @Override public void onError(Message message, RongIMClient.ErrorCode errorCode) { //消息发送失败的回调 Log.e("TAG",message.toString()); } });}利用自定义消息的方式发送自定义的表情,需要IOS端也用这种方法,否则IOS端将收不到安卓端发送过来的自定义消息噢。
阅读全文
1 0
- 融云利用自定义消息的方式发送自定义表情
- android的自定义表情
- 自定义消息及发送
- 总结:发送自定义消息
- 总结:发送自定义消息
- 总结:发送自定义消息
- 总结:发送自定义消息
- 自定义消息发送字符串
- MFC - 发送自定义消息
- 自定义消息的发送与接收处理
- 自定义消息的发送与响应:
- MFC中发送自定义消息机制,PostMessage和SendMessage方式
- iOS自定义的表情键盘
- iOS自定义的表情键盘
- 定义和发送自定义消息
- 使用postmessage发送自定义消息
- 阿里云旺自定义消息和首次打开聊天界面自动发送消息的实现
- SendMessage发送自定义消息及消息响应
- nginx---rewrite
- JavaScript之BOM的五类对象简介
- 搭建Ubuntu基本环境
- 总有你值得一试的python开源项目
- 【HIbernate】(五)关联映射之多对一映射
- 融云利用自定义消息的方式发送自定义表情
- TCP那些事儿(3)
- 栈 数组
- Spring Boot日志文件的配置学习笔记
- 打印机
- ABAP CDS 替代对象(Replacement Objects)引起的数据错误
- OpenGL光源位置
- spingMVC+poi导出文件
- AvaudioRecorder 录音