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集成以及使用详解(二)相关推荐

  1. 融云android聊天界面,Android 融云IM集成以及使用详解(一)

    Android 融云IM集成以及使用详解(一) 集成 1.具体的集成步骤就不在详细介绍,我们只说干货,附上融云IM官方文档地址,里面有更为详细的集成介绍 https://www.rongcloud.c ...

  2. android 融云sdk集成,使用融云SDK集成

    使用融云开始还是遇到了很多的坑的,特别是看不太明白官方文档.或许自己不够有耐心. 期间还遇到了许多bug,比如,明明配置的没问题了,可我的手机还是连不上融云. 后来还是在融云的知识库中找到了解决办法, ...

  3. android.intent.action.view 融云,Android 融云SDK集成单聊

    一 .下载 SDK 您可以到融云官方网站下载融云 SDK.融云 SDK 各部分功能以插件化的形式独立提供,开发者可以根据自己的需要,自由组合下载.各组件的功能如下: IMKit – 融云 IM 界面组 ...

  4. android融云版本号,Android 融云IM集成方法以及解决的一些问题

    我项目的消息列表页面采用的是fragment+viewPage的方式,而官方提供的方式却是activity中的,而且我还需要在消息列表页面添加其他控件,所以我采用了fragment中套IM提供的fra ...

  5. 融云android sdk文档,使用融云SDK集成

    使用融云开始还是遇到了很多的坑的,特别是看不太明白官方文档.或许自己不够有耐心. 期间还遇到了许多bug,比如,明明配置的没问题了,可我的手机还是连不上融云. 后来还是在融云的知识库中找到了解决办法, ...

  6. android 融云浏览大图,融云 Android sdk kit 头像昵称更新机制

    先申明笔者的实现方式不是唯一 也不一定是最优化的方案 如果您看到此篇博文 有不同看法 或者 更好的优化 更高的效率 欢迎在评论发表意见 融云官网点我 融云头像机制相关视频详解 首先跟大家说一下 kit ...

  7. android组件用法说明,Android第三方控件PhotoView使用方法详解

    Android第三方控件PhotoView使用方法详解 发布时间:2020-10-21 15:06:09 来源:脚本之家 阅读:74 作者:zhaihaohao1 PhotoView的简介: 这是一个 ...

  8. android底部滑动出现虚拟按键,Android适配底部虚拟按键的方法详解

    Android适配底部虚拟按键的方法详解 发布时间:2020-10-09 05:26:12 来源:脚本之家 阅读:171 作者:yuanzhihui123 最近项目进行适配的时候发现部分(如华为手机) ...

  9. Android 8.0学习(32)---Android 8.0源码目录结构详解

    Android 8.0源码目录结构详解 android的移植按如下流程:     (1)android linux 内核的普通驱动移植,让内核可以在目标平台上运行起来.     (2)正确挂载文件系统 ...

最新文章

  1. 1微秒等于多少皮秒_注册汽油贸易公司分享1升汽油等于多少公斤?
  2. java用集合类求数组交并集_java 并集 数组/集合 有重复元素需 保留(急)
  3. 推荐.NET CF控件(Resco MobileForms Toolkit)
  4. vue跳转页面增加等待_vue跳转页面方法
  5. 约翰·钱伯斯 创新想法
  6. Java讲课笔记14:final关键字
  7. Linux下如何手动搭建论坛?
  8. 当html里语义化,HTML5语义化
  9. 使用struts做一个简单的登录跳转
  10. Android Studio的Android Monitor窗口中把标签拉出来之后放不回去的解决方法
  11. python怎么变白-Python将png透明变为白色并保存为jpg图片
  12. linux系统读移动硬盘,在linux系统上识别与挂载移动硬盘数据
  13. 京东商城在掩盖什么?(1)
  14. 新鲜出炉2010笑话集锦,我竟然一个都没听过
  15. 重采样 上采样 下采样
  16. 探秘Google苏黎世办公室:放肆的享乐主义
  17. 使用wildfly部署项目
  18. shell终端多目录间快速cd工具
  19. 编程语言王国的唯一王者
  20. mac 下窗口管理器与win的软件名称

热门文章

  1. 如何获取瘦人肠道菌群_肠道菌群移植—让你获得窈窕身材
  2. EasyApi:简单快速的自动化接口实现,Token自刷新,错误预处理
  3. 回收租赁系统app源码,物品回收+物品租赁+二手交易三大场景
  4. UnityShader屏幕特效之Bloom
  5. css、js、浏览器、vue、react、移动web、前端性能、算法、node前端面试题
  6. k8s pod详细讲解
  7. 微软将永久关闭全球所有零售店,背后是何原因?
  8. 【股票指标分析 KDJ】量化投资python实时计算KDJ以及MACD
  9. 判断浏览器(微信、微博、QQ)、操作系统、横竖屏等
  10. 自制软3D渲染程序 之一 3D起草程序