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

发布时间: 2017-08-07 18:41:27 作者: 大象笔记

交互逻辑

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

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

Android Activity 间的切换

实现参考 Start Another Activity | Android Developers

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

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

demo 中有两个重要的 activity

使用 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 了。

我是一名山东烟台的开发者,联系作者