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

更新日期: 2019-07-07 阅读次数: 6859 分类: weex

交互逻辑

  • 点击交流功能 -> 进入环信 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 聊聊。 白天工地搬砖,晚上哄熊孩子,可能回复有点慢,见谅。 查看更多联系方式

相关文章

爱评论不评论

近期节日

2020年02月24日 第三世界青年日
2020年02月24日 龙抬头
2020年02月28日 世界居住条件调查日
2020年03月01日 国际海豹日
2020年03月03日 全国爱耳日
2020年03月05日 学雷锋日
2020年03月05日 惊蛰
2020年03月08日 三八妇女节
2020年03月12日 植树节
2020年03月14日 白色情人节
2020年03月15日 消费者权益日
2020年03月17日 国际航海日
查看更多节日