Weex Android 接入环信聊天功能(一)会话窗口

文章目录

    交互逻辑

    • 点击交流功能 -> 进入环信 Demo 的通信录页面?会话列表页面?感觉会话列表页面更合理一点
    • 从 Weex 通信录点击发送信息 -> 进入环信 Demo 的具体某个联系人的实时聊天页面

    实际上就是在 Weex 中需要跳转到 demo 里的具体某个 activity。

    最麻烦的逻辑在于如何从环信 UI 跳回到 Weex 的页面。

    weex 接入环信聊天功能

    Android Activity 间的切换

    实现参考 Start Another Activity | Android Developers

    Android 官方的 Getting Started 是最好的入门文档。

    首先,下载个 demo 看看环信是如何实现 activity 间切换的。

    demo 中有两个重要的 activity

    • MainActivity: 包含了三个 tab, 默认为会话列表页面 tab
    • ChatActivity: 会话页面

    使用 EaseUI 集成还是使用 Demo 的代码

    参考 教你如何快速集成环信(android端EaseUI

    从资料来看,直接集成 EaseUI 就可以。

    gradle 依赖冲突

    Error:Conflict with dependency ‘com.android.support:support-annotations’ in project ‘:app’. Resolved versions for app (24.2.1) and test app (23.1.1) differ. See http://g.co/androidstudio/app-test-app-conflict for details.

    解决方法,在 app 的 gradle build 中加入

    androidTestCompile ‘com.android.support:support-annotations:24.2.1’

    目的是显式地声明我要使用指定版本的依赖。

    参考: Resolving Conflicts in android gradle dependencies – Mindorks

    调用环信的 EaseUI 界面

    简单的测试方法就是,默认加载 EaseUI 的 chat activity

    package com.alibaba.weex;
    
    import android.content.Intent;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.support.v4.app.FragmentActivity;
    import android.util.Log;
    
    import com.hyphenate.EMCallBack;
    import com.hyphenate.easeui.EaseConstant;
    //import com.hyphenate.easeui.ui.EaseConversationList;
    import com.hyphenate.easeui.ui.EaseChatFragment;
    import com.hyphenate.chat.EMClient;
    
    public class ConversationActivity extends FragmentActivity {
        //protected EaseConversationList conversationListView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_conversation);
    
            EMClient.getInstance().login("test1", "123456", new EMCallBack() {//回调
                @Override
                public void onSuccess() {
                    EMClient.getInstance().groupManager().loadAllGroups();
                    EMClient.getInstance().chatManager().loadAllConversations();
                    Log.d("main", "登录聊天服务器成功!");
                }
    
                @Override
                public void onProgress(int progress, String status) {
    
                }
    
                @Override
                public void onError(int code, String message) {
                    Log.d("main", "登录聊天服务器失败!");
                }
            });
    
            Intent intent = getIntent();
            String targetUserId = intent.getStringExtra(EaseConstant.EXTRA_USER_ID);
    
            //new出EaseChatFragment或其子类的实例
            EaseChatFragment chatFragment = new EaseChatFragment();
            //传入参数
            Bundle args = new Bundle();
            // 默认为单聊
            // args.putInt(EaseConstant.EXTRA_CHAT_TYPE, EaseConstant.CHATTYPE_GROUP);
            args.putString(EaseConstant.EXTRA_USER_ID, targetUserId);
            chatFragment.setArguments(args);
            getSupportFragmentManager().beginTransaction().add(R.id.container, chatFragment).commit();
        }
    
    }
    

    报错

    java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/system/framework/android.test.runner.jar" ...
    couldn't find "libhyphenate.so"
    

    需要在 app 的 build.gradle 里引入

    compile 'com.hyphenate:hyphenate-sdk:3.3.0'
    

    原因是,之前只是引入了 easeui,但是没有引入聊天的 sdk。

    No view found for id 0x7f0e0086 (com.sunzhongwei.test:id/container) for fragment EaseChatFragment{e1af943 #0 id=0x7f0e0086}

    从代码来看

    getSupportFragmentManager().beginTransaction().add(R.id.container, chatFragment).commit();
    

    布局里需要有container这个id的控件

    android:id="@+id/container"
    

    在 layout 的 xml 文件中加入这行就 OK 了。

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式