融云初次集成群组聊天
来源:互联网 发布:手机超牛数据恢复软件 编辑:程序博客网 时间:2024/05/01 21:35
- 查看文档,初次集成推荐下载使用IMkit
- 依照文档 IM 基础服务开发指南—>IM界面组件IMkit 配置工程;
·若要在聊天界面可分享地址,需要填写高德key,直接在demo里复制了一个。
<!-- 高德地图-->
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="e09af6a2b26c02086e9216bd07c960ae"/>
用户信息提供者
- 注册
public class App extends Application { @Override public void onCreate() { super.onCreate(); RongIM.init(this); }}
- 这里下载的2.8.7的融云kit包
- 登录成功后,开始连接融云:connect
- connect成功之后,刷新个人信息
LoginActivity extends BaseActivity implements RongIM.UserInfoProvider{ oncreat{ 。。。。 RongIM.setUserInfoProvider(this, true); }@Overridepublic UserInfo getUserInfo(String s) { return new UserInfo(s, NickName, Uri.parse(AppConstant.RequestPath.BASE_API_URL + Photo)); } }
/** * 连接融云成功 * @param userId 当前 token */@Overridepublic void onSuccess(String userId) { Log.d("LoginActivity", "--onSuccess---" + userId); //刷新用户信息头像 RongIM.getInstance().refreshUserInfoCache(new UserInfo(userId, NickName, Uri.parse(AppConstant.RequestPath.BASE_API_URL + Photo)));}
继承群组会话界面
MyApplication.java
public class MyApplication extends MultiDexApplication { public static Context context;//公共的上下文变量 public static ScaleAction scaleScreenHelper; private String TAG = "ChatActivity"; static MyApplication mInstance; public static boolean RM_CONNECTED; public static boolean isRmConnected() { return RM_CONNECTED; } public static void setRmConnected(boolean rmConnected) { RM_CONNECTED = rmConnected; } @Override public void onCreate() { super.onCreate(); context = this; mInstance = this; //融云相关 RongIM.init(this); RongIM.getInstance().setSendMessageListener(new MySendMessageListener()); RongIM.setOnReceiveMessageListener(new MyReceiveMessageListener()); } public static MyApplication getInstance() { return mInstance; } private class MyReceiveMessageListener implements RongIMClient.OnReceiveMessageListener { /** * 收到消息的处理。 * * @param message 收到的消息实体。 * @param left 剩余未拉取消息数目。 * @return 收到消息是否处理完成,true 表示自己处理铃声和后台通知,false 走融云默认处理方式。 */ @Override public boolean onReceived(Message message, int left) { //开发者根据自己需求自行处理 Log.i(TAG, "message" + message.getContent()); String msg = String.valueOf(message); Log.i(TAG, "msg" + msg); return false; } } private class MySendMessageListener implements RongIM.OnSendMessageListener { /** * 消息发送前监听器处理接口(是否发送成功可以从 SentStatus 属性获取)。 * * @param message 发送的消息实例。 * @return 处理后的消息实例。 */ @Override public Message onSend(Message message) { //开发者根据自己需求自行处理逻辑 return message; } /** * 消息在 UI 展示后执行/自己的消息发出后执行,无论成功或失败。 * * @param message 消息实例。 * @param sentMessageErrorCode 发送消息失败的状态码,消息发送成功 SentMessageErrorCode 为 null。 * @return true 表示走自已的处理方式,false 走融云默认处理方式。 */ @Override public boolean onSent(Message message, RongIM.SentMessageErrorCode sentMessageErrorCode) { if (message.getSentStatus() == Message.SentStatus.FAILED) { if (sentMessageErrorCode == RongIM.SentMessageErrorCode.NOT_IN_CHATROOM) { //不在聊天室 } else if (sentMessageErrorCode == RongIM.SentMessageErrorCode.NOT_IN_DISCUSSION) { //不在讨论组 } else if (sentMessageErrorCode == RongIM.SentMessageErrorCode.NOT_IN_GROUP) { //不在群组 } else if (sentMessageErrorCode == RongIM.SentMessageErrorCode.REJECTED_BY_BLACKLIST) { //你在他的黑名单中 } } MessageContent messageContent = message.getContent(); if (messageContent instanceof TextMessage) {//文本消息 TextMessage textMessage = (TextMessage) messageContent; Log.d(TAG, "onSent-TextMessage:" + textMessage.getContent()); } else if (messageContent instanceof ImageMessage) {//图片消息 ImageMessage imageMessage = (ImageMessage) messageContent; Log.d(TAG, "onSent-ImageMessage:" + imageMessage.getRemoteUri()); } else if (messageContent instanceof VoiceMessage) {//语音消息 VoiceMessage voiceMessage = (VoiceMessage) messageContent; Log.d(TAG, "onSent-voiceMessage:" + voiceMessage.getUri().toString()); } else if (messageContent instanceof RichContentMessage) {//图文消息 RichContentMessage richContentMessage = (RichContentMessage) messageContent; Log.d(TAG, "onSent-RichContentMessage:" + richContentMessage.getContent()); } else { Log.d(TAG, "onSent-其他消息,自己来判断处理"); } return false; } } /** * 获得当前进程的名字 * * @param context * @return 进程号 */ public static String getCurProcessName(Context context) { int pid = android.os.Process.myPid(); ActivityManager activityManager = (ActivityManager) context .getSystemService(Context.ACTIVITY_SERVICE); for (ActivityManager.RunningAppProcessInfo appProcess : activityManager .getRunningAppProcesses()) { if (appProcess.pid == pid) { return appProcess.processName; } } return null; }
baseActivity.java
因为收到被顶下来的消息需要退出登录,所以写在baseactivity里
RongIM.setConnectionStatusListener(new MyConnectionStatusListener()); private class MyConnectionStatusListener implements RongIMClient.ConnectionStatusListener { @Override public void onChanged(RongIMClient.ConnectionStatusListener.ConnectionStatus connectionStatus) { switch (connectionStatus) { case CONNECTED://连接成功。 MyApplication.setRmConnected(true); Log.i(TAG, "连接成功"); //Toast.makeText(mContext,"连接成功",Toast.LENGTH_SHORT).show(); break; case DISCONNECTED://断开连接。 MyApplication.setRmConnected(false); Log.i(TAG, "连接断开"); // Toast.makeText(mContext,"连接断开",Toast.LENGTH_SHORT).show(); break; case CONNECTING://连接中。 Log.i(TAG, "连接ing"); // Toast.makeText(mContext,"连接ing",Toast.LENGTH_SHORT).show(); break; case NETWORK_UNAVAILABLE://网络不可用。 Log.i(TAG, "网络不可用"); // Toast.makeText(mContext,"网络不可用",Toast.LENGTH_SHORT).show(); break; case KICKED_OFFLINE_BY_OTHER_CLIENT://用户账户在其他设备登录,本机会被踢掉线 Log.i(TAG, "用户账户在其他设备登录,本机会被踢掉线"); SpUtil.cleanStringValue(Constant.SpConstants.USER_INFO, Constant.SpConstants.Token); SpUtil.cleanStringValue(Constant.SpConstants.USER_INFO, Constant.SpConstants.ClientId); Intent intent = new Intent(mContext, LoginActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra("toast", "用户账户在其他设备登录,本机会被踢掉线"); startActivity(intent); finish(); break; } } }
需要启动会画界面的地方
拿到群组id后启动:
RongIM.getInstance().startConversation(getActivity(), Conversation.ConversationType.GROUP, groupId, "咨询室");
AndroidManifest.xml
<!-- =======================================融云================================== --> <!--会话界面--> <activity android:name=".chatroom.ConversationActivity" android:screenOrientation="portrait" android:windowSoftInputMode="stateHidden|adjustResize"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:host="com.espar.www.esparclientios" android:pathPrefix="/conversation/" android:scheme="rong" /> </intent-filter> </activity> <provider android:name="android.support.v4.content.FileProvider" android:authorities="com.espar.www.esparclientios.FileProvider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/rc_file_path" /> </provider> <!-- =======================================融云end================================== -->
ConversationActivity
public class ConversationActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_conversation); Uri uri = getIntent().getData(); //获取 title title = uri.getQueryParameter("title").toString(); targetId = uri.getQueryParameter("targetId").toString(); }}
<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.espar.www.esparclientios.chatroom.ConversationActivity"> <fragment android:id="@+id/conversation" android:name="io.rong.imkit.fragment.ConversationFragment" android:layout_width="match_parent" android:layout_height="match_parent" /></android.support.constraint.ConstraintLayout>
标题
0 0
- 融云初次集成群组聊天
- 融云聊天集成
- 集成融云聊天室(自定义聊天界面)
- Android集成网易云信(关于聊天与聊天界面)
- 关于融云的集成二(数据展示到聊天界面)
- Android集成网易云信(关于聊天发送位置消息)
- 集成环信实现聊天
- 热更新Tinker的初次集成使用
- 初次熟悉使用jenkins 持续集成
- 融云即时聊天,IM
- XMPP之群组聊天
- 集成网易云信实现自定义消息(类似淘宝聊天发送商品信息)
- iOS - 集成环信聊天界面
- Android 即时聊天-融云IM集成。
- SpringMvc+Mybatis企业级集成Websocket在线聊天
- Android 集成FireBase Realtime DataBase实现聊天
- 初次
- 初次
- Python中导入非默认路径的模块
- [leetcode]405. Convert a Number to Hexadecimal
- Extjs4学习笔记(五)------checkboxgroup插件从后台获得数据,一键全选
- asp.net Maximum request length exceeded的解决办法
- SpringMVC 处理Date类型@DateTimeFormat <fmt:formatDate/> @InitBinder
- 融云初次集成群组聊天
- 利用STL容器stack实现一个简单的计算器
- Android中在TextView里面替换掉带html标签和不带标签的url,并支持点击
- DirectShow播放视频流程
- WAMP搭建集成环境搭建
- adb连不上夜深模拟器解决方法
- spring
- 从官方例子入手 (详解排序、分组)——kettle实战(3)
- 文号表达式