融云利用自定义消息的方式发送自定义表情
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; } @Override public 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) {//长按删除事件
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();
}}
4,点击表情时发送一条自定义的消息,这个方法需要在自定义的表情tab页调用
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端将收不到安卓端发送过来的自定义消息噢。
融云利用自定义消息的方式发送自定义表情相关推荐
- 融云超级群的「新能力」
作为构建实时社区的第一选择,融云超级群自发布以来很好地满足了类 Discord 实时社区业务场景的客户需求.关注[融云全球互联网通信云]了解更多 随着服务的不断推进,融云超级群服务也在持续更新迭代,以 ...
- 【融云分析】选择IM云服务,需要看哪些核心技术指标?
IM(即时通讯)云服务已发展数年,不少企业与开发者都倾向于选择第三方IM云服务,短平快地为应用添加即时通讯能力,但如何选择服务商却是个难题,单从简单的功能介绍来看无法判断,因为IM云服务接入后,更重要 ...
- 场景实践 | 如何使用融云超级群构建游戏社区
我们的"在线"时间越来越长了.关注[融云全球互联网通信云]了解更多 在电竞内容体验方面尤其如此.根据艾瑞咨询数据,在 2021 年中国电竞用户中,平均每周玩 11-20 小时电竞游 ...
- 融云服务器实时消息路由,IM 北极星产品功能介绍
IM 北极星 概述 IM 北极星主要为开发者提供了终端用户连接及消息发送状态查询功能:通过查看用户的连接日志,判断用户某时间段内是否可以正常使用融云服务,如:用户反馈消息发送不成功,可能是因为该用户在 ...
- 专业、简单、稳定,融云重新定义互联网通信云服务
艾瑞咨询<2023 年全球互联网通信云行业研究报告>(下简称<报告>)显示,79.1% 的开发者计划或已经出海,其中已将应用推到海外的开发者占比 43%.关注[融云全球互联网通 ...
- 行业独角兽的背后——融云保障陆金所百万用户数据安全固若金汤
2017年11月底,我国互联网金融业务年度总成交量高达25800亿元,较2016年同期增长47.8%.在行业发展势头强劲的大环境下,如何稳固的为用户提供优质服务.保障数据安全.提供特色产品已成为互联网 ...
- 融云IM整理 01--- (API)
融云IM整理 01- (API) ###常用的的方法有 获取Token 链接融云服务器 发文本消息 发送图片消息 发送语音消息 发送文件消息 发送自定义消息 插入消息(只在本地存储,不发送) 获取本地 ...
- 融云 Unity SDK 升级,专注游戏场景,更好社交体验
游戏已经不单单是一种娱乐方式.关注[融云全球互联网通信云]了解更多 作为离元宇宙最近的赛道,游戏不仅是各种沉浸式体验类技术落地融合的首发场景,也是创作者经济爆发的热土. 移动游戏在人们的线上消费方面势 ...
- 融云 WICC 剧透:“安全”出海不触礁,全球合规指南一网打尽
2020 年,全球顶级电子游戏开发工作室"顽皮狗"(Naughty Dog)旗下的<美国末日2>在中东遭到下架,原因是 ESRB(娱乐软件分级委员会)对该游戏的评级为包 ...
最新文章
- php7 swoole 扩展,PHP7.2加入swoole扩展
- java集合框架容器 java框架层级 继承图结构 集合框架的抽象类 集合框架主要实现类...
- 深入浅出!阿里运维专家三种方法教你如何应对高并发“海啸”场景
- 你敢在post和get上刁难我,就别怪我装逼了
- 基于直方图处理的图像增强
- Question of the Day: Microsoft | Database, Multiple Questions in One
- eclipse下的jrebel配置
- python+办公自动化_Python办公自动化之操作excel
- mysql net 指令_MySQL命令
- C++ typename的使用方式
- UVa10047 BFS
- 如何看懂时序图LCD1602(经典)
- 调用阿里API获取城市天气信息
- 微信公众号实现消息模板的推送
- 苹果输入法怎么换行_朋友圈长文字不折叠输入法,复制粘贴避免只显示一行
- WSJ Merkel Top On Forbes' Most Powerful Women List For 4th Year
- 你不知道的网站图片存储格式-base64
- 达梦数据库逻辑备份(dexp/dimp)
- 战舰帝国服务器维护,【图片】9月17日更新公告亲爱的司令官:《战舰帝国》于9月17日维护,成功更新后可以获得200个钻石的更新补偿_战舰帝国吧_百度贴吧...
- 数据化建设知识图谱(文末附PDF下载)
热门文章
- 面试中常被问到(四)C/C++中数组,指针和引用的区别
- 为什么勒贝格积分比黎曼积分强?
- java的rest教程_[Java教程]SpringMVC的REST风格的四种请求方式
- 物联网设备的使用案例及管理系统
- 三星emmc芯片手册_聊聊存储器EMMC与DDR的那些事儿~~~
- 从本地html提取表格,如何从这个网页提取表格数据,做成电子表格呢?谢谢
- js 匿名函数自调用
- oracle数据库是三级模式结构,什么是数据库三级模式结构?
- [数字媒体] PR视频剪辑之自定义音频、视频加速转场和特显停顿
- 欧几里得最短距离公式_欧几里得度量(欧氏距离)