融云初次集成群组聊天

来源:互联网 发布:手机超牛数据恢复软件 编辑:程序博客网 时间:2024/05/01 21:35
  1. 查看文档,初次集成推荐下载使用IMkit
  2. 依照文档 IM 基础服务开发指南—>IM界面组件IMkit 配置工程;
    ·若要在聊天界面可分享地址,需要填写高德key,直接在demo里复制了一个。
    <!-- 高德地图-->
    <meta-data
    android:name="com.amap.api.v2.apikey"
    android:value="e09af6a2b26c02086e9216bd07c960ae"/>

用户信息提供者

  1. 注册
public class App extends Application {    @Override    public void onCreate() {        super.onCreate();        RongIM.init(this);    }}
  1. 这里下载的2.8.7的融云kit包
  2. 登录成功后,开始连接融云:connect
  3. 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
原创粉丝点击