Android 融云IM集成以及使用详解(二)
Android 融云IM集成以及使用详解(二)
上篇讲解了集成和好友列表和消息记录的使用,这篇将讲解聊天界面和群聊界面的使用
先附上一张效果图
先介绍布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/white"android:orientation="vertical"tools:context=".im.activity.ChatActivity"> //这里要注意//自行在这里添加自己的头部<Viewandroid:layout_width="match_parent"android:layout_height="0.3dp"android:background="#ededed" /><fragmentandroid:id="@+id/conversation"android:name="io.rong.imkit.fragment.ConversationFragment"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/white" />
</LinearLayout>
代码中的使用
targetId = getIntent().getData().getQueryParameter("targetId"); //传递的融云的id String title = getIntent().getData().getQueryParameter("title"); //传递的融云名称/用户昵称 //需要先设置用户数据提供者 上篇博客有讲解
监听器的设置
//融云发送消息的监听 RongIM.getInstance().setSendMessageListener(new RongIM.OnSendMessageListener() {@Overridepublic Message onSend(Message message) {Log.e("tag", "------------------------------message----message-----------------------------");@Overridepublic boolean onSent(Message message, RongIM.SentMessageErrorCode sentMessageErrorCode) {return false;} }); //融云消息的点击监听RongIM.setConversationClickListener(this);@Overridepublic boolean onUserPortraitClick(Context context, Conversation.ConversationType conversationType, UserInfo userInfo, String targetId) {//点击用户头像的监听String rongUserId = userInfo.getUserId();return false;}@Overridepublic boolean onUserPortraitLongClick(Context context, Conversation.ConversationType conversationType, UserInfo userInfo, String s) {return false;}@Overridepublic boolean onMessageClick(Context context, View view, Message message) {//在这里可以判断点击消息的类型 进行不同的跳转 if (message.getContent() instanceof LocationMessage) {Intent intent = new Intent(ChatActivity.this, GuideActivity.class);intent.putExtra("location", message.getContent());intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent);return true;} else {return false;}}
群聊消息的界面
还是先附上一张效果图
注意需要在配置清单里面配置界面,在聊天记录界面初始化列表时开启聚合会话
下面是XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent" android:layout_height="match_parent"android:orientation="vertical"><com.leyongleshi.ljd.view.HeadTitleLinearViewandroid:id="@+id/mHeadView"android:layout_width="match_parent"android:layout_height="wrap_content"/><FrameLayoutandroid:id="@+id/rong_content"android:layout_width="match_parent"android:layout_height="match_parent" /> </LinearLayout>
再附上全部代码
/*** Created by Bob on 15/11/3.* 聚合会话列表*/
public class SubConversationListActivity extends BaseActivity {@BindView(R.id.mHeadView)HeadTitleLinearView mMHeadView;@BindView(R.id.rong_content)FrameLayout mRongContent;@Overridepublic int getResId() {return R.layout.activity_rong;}@Overridepublic void initView() {SubConversationListFragment fragment = new SubConversationListFragment();fragment.setAdapter(new SubConversationListAdapterEx(RongContext.getInstance()));FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();transaction.add(R.id.rong_content, fragment);transaction.commit();Intent intent = getIntent();if (intent.getData() == null) {return;}//聚合会话参数String type = intent.getData().getQueryParameter("type");if (type == null)return;if (type.equals("group")) {mMHeadView.setTitle("群组");} else if (type.equals("private")) {mMHeadView.setTitle("私人会话");} else if (type.equals("discussion")) {mMHeadView.setTitle("我的讨论组");} else if (type.equals("system")) {mMHeadView.setTitle("系统消息");} else {mMHeadView.setTitle("聊天");}}@Overridepublic void initData() {}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);ButterKnife.bind(this);}@Overridepublic void initPresenter() {}
}
上面就算是基本的融云IM的使用了 下面再附上一些自定义的功能
底部按钮的添加 注意:需要在初始化时把自定义的按钮添加进去
/*** 添加自定义按钮*/ public class RecognizeExtensionModule2 extends DefaultExtensionModule {private static RecognizeExtensionModule2 singleInstance = null;private RecognizeExtensionModule2() {}public static RecognizeExtensionModule2 getInstence(){if (singleInstance == null) {synchronized (RecognizeExtensionModule.class) {if (singleInstance == null) {singleInstance = new RecognizeExtensionModule2();}}}return singleInstance;}@Overridepublic void onInit(String appKey) {}@Overridepublic void onConnect(String token) {}@Overridepublic void onAttachedToExtension(RongExtension extension) {}@Overridepublic void onDetachedFromExtension() {}@Overridepublic void onReceivedMessage(Message message) {}@Overridepublic List<IPluginModule> getPluginModules(Conversation.ConversationType conversationType) {List<IPluginModule> pluginModules = new ArrayList<>();//创建位置按钮LocationPlugin recognizePlugin = new LocationPlugin();//添加位置pluginModules.add(recognizePlugin);//自定义的按钮SignInPlugin signInPlugin = new SignInPlugin();if (conversationType.equals(Conversation.ConversationType.GROUP)){pluginModules.add(signInPlugin);}return pluginModules;}@Overridepublic List<IEmoticonTab> getEmoticonTabs() {return super.getEmoticonTabs();}@Overridepublic void onDisconnect() {} }
按钮的界面
/*** 发送位置按钮*/public class LocationPlugin implements IPluginModule {private Conversation.ConversationType conversationType;private String targetId;@Overridepublic Drawable obtainDrawable(Context context) {//按钮的资源Drawable drawable = BaseApplication.getContext().getResources().getDrawable(R.mipmap.icon_rm_postion);return drawable;}@Overridepublic String obtainTitle(Context context) {return "位置"; //名称}@Overridepublic void onClick(Fragment fragment, RongExtension rongExtension) {//示例获取 会话类型、targetId、Context,此处可根据产品需求自定义逻辑,如:开启新的 Activity 等。conversationType = rongExtension.getConversationType();targetId = rongExtension.getTargetId();//只有通过 extension 中的 startActivityForPluginResult 才会返回到本类中的 onActivityResultrongExtension.startActivityForPluginResult(new Intent(fragment.getActivity(),BaiDuLocationActivity.class),5, this);}@Overridepublic void onActivityResult(int i, int i1, Intent data) {if (data != null) {double latitude = data.getDoubleExtra("latitude",0.00);double longitude = data.getDoubleExtra("longitude",0.00);String address = data.getStringExtra("address");String uri = data.getStringExtra("locuri");//发送位置消息LocationMessage locationMessage = LocationMessage.obtain(latitude,longitude,address, Uri.parse(uri));RongIM.getInstance().sendLocationMessage(Message.obtain(targetId, conversationType, locationMessage), null, null, null);}} }
添加融云客服功能
CSCustomServiceInfo.Builder csBuilder = new CSCustomServiceInfo.Builder(); CSCustomServiceInfo csInfo = csBuilder.nickName("融云").build(); RongIM.getInstance().startCustomerServiceChat(getActivity(), "key", "name", csInfo);
点击融云推送的聊天消息 需要在配置文件中配置
public class SealNotificationReceiver extends PushMessageReceiver {/* push 通知到达事件*/@Overridepublic boolean onNotificationMessageArrived(Context context, PushNotificationMessage message) {return false; // 返回 false, 会弹出融云 SDK 默认通知; 返回 true, 融云 SDK 不会弹通知, 通知需要由您自定义。}/* push 通知点击事件 */@Overridepublic boolean onNotificationMessageClicked(Context context, PushNotificationMessage message) {return false; // 返回 false, 会走融云 SDK 默认处理逻辑, 即点击该通知会打开会话列表或会话界面; 返回 true, 则由您自定义处理逻辑。} }
以上就是对项目融云的一个简单总结 各位仅做参考 还有许多融云功能未用到,有需要的朋友可以去参考融云的官方文档以及下载推荐的Dome研究
Android 融云IM集成以及使用详解(二)相关推荐
- 融云android聊天界面,Android 融云IM集成以及使用详解(一)
Android 融云IM集成以及使用详解(一) 集成 1.具体的集成步骤就不在详细介绍,我们只说干货,附上融云IM官方文档地址,里面有更为详细的集成介绍 https://www.rongcloud.c ...
- android 融云sdk集成,使用融云SDK集成
使用融云开始还是遇到了很多的坑的,特别是看不太明白官方文档.或许自己不够有耐心. 期间还遇到了许多bug,比如,明明配置的没问题了,可我的手机还是连不上融云. 后来还是在融云的知识库中找到了解决办法, ...
- android.intent.action.view 融云,Android 融云SDK集成单聊
一 .下载 SDK 您可以到融云官方网站下载融云 SDK.融云 SDK 各部分功能以插件化的形式独立提供,开发者可以根据自己的需要,自由组合下载.各组件的功能如下: IMKit – 融云 IM 界面组 ...
- android融云版本号,Android 融云IM集成方法以及解决的一些问题
我项目的消息列表页面采用的是fragment+viewPage的方式,而官方提供的方式却是activity中的,而且我还需要在消息列表页面添加其他控件,所以我采用了fragment中套IM提供的fra ...
- 融云android sdk文档,使用融云SDK集成
使用融云开始还是遇到了很多的坑的,特别是看不太明白官方文档.或许自己不够有耐心. 期间还遇到了许多bug,比如,明明配置的没问题了,可我的手机还是连不上融云. 后来还是在融云的知识库中找到了解决办法, ...
- android 融云浏览大图,融云 Android sdk kit 头像昵称更新机制
先申明笔者的实现方式不是唯一 也不一定是最优化的方案 如果您看到此篇博文 有不同看法 或者 更好的优化 更高的效率 欢迎在评论发表意见 融云官网点我 融云头像机制相关视频详解 首先跟大家说一下 kit ...
- android组件用法说明,Android第三方控件PhotoView使用方法详解
Android第三方控件PhotoView使用方法详解 发布时间:2020-10-21 15:06:09 来源:脚本之家 阅读:74 作者:zhaihaohao1 PhotoView的简介: 这是一个 ...
- android底部滑动出现虚拟按键,Android适配底部虚拟按键的方法详解
Android适配底部虚拟按键的方法详解 发布时间:2020-10-09 05:26:12 来源:脚本之家 阅读:171 作者:yuanzhihui123 最近项目进行适配的时候发现部分(如华为手机) ...
- Android 8.0学习(32)---Android 8.0源码目录结构详解
Android 8.0源码目录结构详解 android的移植按如下流程: (1)android linux 内核的普通驱动移植,让内核可以在目标平台上运行起来. (2)正确挂载文件系统 ...
最新文章
- 1微秒等于多少皮秒_注册汽油贸易公司分享1升汽油等于多少公斤?
- java用集合类求数组交并集_java 并集 数组/集合 有重复元素需 保留(急)
- 推荐.NET CF控件(Resco MobileForms Toolkit)
- vue跳转页面增加等待_vue跳转页面方法
- 约翰·钱伯斯 创新想法
- Java讲课笔记14:final关键字
- Linux下如何手动搭建论坛?
- 当html里语义化,HTML5语义化
- 使用struts做一个简单的登录跳转
- Android Studio的Android Monitor窗口中把标签拉出来之后放不回去的解决方法
- python怎么变白-Python将png透明变为白色并保存为jpg图片
- linux系统读移动硬盘,在linux系统上识别与挂载移动硬盘数据
- 京东商城在掩盖什么?(1)
- 新鲜出炉2010笑话集锦,我竟然一个都没听过
- 重采样 上采样 下采样
- 探秘Google苏黎世办公室:放肆的享乐主义
- 使用wildfly部署项目
- shell终端多目录间快速cd工具
- 编程语言王国的唯一王者
- mac 下窗口管理器与win的软件名称
热门文章
- 如何获取瘦人肠道菌群_肠道菌群移植—让你获得窈窕身材
- EasyApi:简单快速的自动化接口实现,Token自刷新,错误预处理
- 回收租赁系统app源码,物品回收+物品租赁+二手交易三大场景
- UnityShader屏幕特效之Bloom
- css、js、浏览器、vue、react、移动web、前端性能、算法、node前端面试题
- k8s pod详细讲解
- 微软将永久关闭全球所有零售店,背后是何原因?
- 【股票指标分析 KDJ】量化投资python实时计算KDJ以及MACD
- 判断浏览器(微信、微博、QQ)、操作系统、横竖屏等
- 自制软3D渲染程序 之一 3D起草程序