Android 使用集成环信EaseUI

原创 2017年09月11日 17:14:31

1.先在环信官网下载环信的api
2.找到examples中的easeui,可以把easeui中的simpledemo删掉
3.在自己的工程中导入easeui(File→new→import module 然后找到easeui的位置)
4.把easeui依赖到自己的项目中

效果图

这里写图片描述

权限

 <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

设置环信的key等

 <!-- 设置环信应用的AppKey -->
        <meta-data
            android:name="EASEMOB_APPKEY"
            android:value="1175161212178599#ci" />
        <!-- 声明SDK所需的service SDK核心功能-->
        <service
            android:name="com.hyphenate.chat.EMChatService"
            android:exported="true" />
        <service
            android:name="com.hyphenate.chat.EMJobService"
            android:exported="true"
            android:permission="android.permission.BIND_JOB_SERVICE" />
        <!-- 声明SDK所需的receiver -->
        <receiver android:name="com.hyphenate.chat.EMMonitorReceiver">
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_REMOVED" />
                <data android:scheme="package" />
            </intent-filter>
            <!-- 可选filter -->
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.intent.action.USER_PRESENT" />
            </intent-filter>
        </receiver>

环信初始化 MyApp

public class MyApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        EMOptions options = new EMOptions();
        // 默认添加好友时,是不需要验证的,改成需要验证
        options.setAcceptInvitationAlways(false);

        EaseUI.getInstance().init(this, options);

    }
}

设置登录,和注册 MainActivity

public class MainActivity extends AppCompatActivity {


    EditText et1, et2;
    Button btn1, btn2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et1 = (EditText) findViewById(R.id.et1);
        et2 = (EditText) findViewById(R.id.et2);
        btn1 = (Button) findViewById(R.id.btn1);
        btn2 = (Button) findViewById(R.id.btn2);
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //登录
                String s1 = et1.getText().toString();
                String s2 = et2.getText().toString();
                if (TextUtils.isEmpty(s1)) {
                    Toast.makeText(getBaseContext(), "账号不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (TextUtils.isEmpty(s2)) {
                    Toast.makeText(getBaseContext(), "账号不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }

                //登录
                login(s1, s2);

            }
        });

        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //注册
                String s1 = et1.getText().toString();
                String s2 = et2.getText().toString();
                if (TextUtils.isEmpty(s1)) {
                    Toast.makeText(getBaseContext(), "账号不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (TextUtils.isEmpty(s2)) {
                    Toast.makeText(getBaseContext(), "账号不能为空", Toast.LENGTH_SHORT).show();
                    return;
                }


                //注册s
                register(s1, s2);
            }
        });

    }


    private void register(final String s1, final String s2) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    EMClient.getInstance().createAccount(s1, s2);
                    Log.e("TalkFragment", "注册成功");
                } catch (HyphenateException e) {
                    e.printStackTrace();
                    Log.e("TalkFragment", "注册失败" + e.getMessage());
                }
            }
        }).start();
    }

    private void login(final String s1, final String s2) {
        EMClient.getInstance().login(s1, s2, new EMCallBack() {
            @Override
            public void onSuccess() {
                startActivity(new Intent(getBaseContext(), TalkActivity.class));
                Log.e("登录", "登录成功");
                EMClient.getInstance().chatManager().loadAllConversations();//会话
                EMClient.getInstance().groupManager().loadAllGroups();//群组
            }

            @Override
            public void onError(int i, String s) {
                Log.d("TalkFragment", i + " " + s.toString());

            }

            @Override
            public void onProgress(int i, String s) {

            }
        });

    }

    /**
     * 退出
     */
    private void logout() {
        EMClient.getInstance().logout(false, new EMCallBack() {
            @Override
            public void onSuccess() {
                startActivity(new Intent(getBaseContext(), MainActivity.class));
                finish();
            }

            @Override
            public void onError(int i, String s) {

            }

            @Override
            public void onProgress(int i, String s) {

            }
        });
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="30dp"
    tools:context="com.example.huantest1.MainActivity">


    <EditText
        android:id="@+id/et1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="账号" />

    <EditText
        android:id="@+id/et2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:hint="密码" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp">

        <Button
            android:id="@+id/btn1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="登录" />

        <Button
            android:id="@+id/btn2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="61dp"
            android:text="注册" />
    </LinearLayout>
</LinearLayout>

选择聊天 TalkActivity

public class TalkActivity extends AppCompatActivity {


    private EditText etName;
    private Button btnChat;
    private Button btnOutLogin;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_contact);

        initView();
        myOnClick();
    }

    private void initView() {
        etName = (EditText) findViewById(R.id.etName);
        btnChat = (Button) findViewById(R.id.btnChat);
        btnOutLogin = (Button) findViewById(R.id.btnOutLogin);
    }

    public void myOnClick() {
//      发起聊天
        btnChat.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startChat();
            }

        });
//      退出登录
        btnOutLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                httpOutLogin();
            }
        });
    }


    /**
     * 开始聊天
     */
    private void startChat() {
        String userId = etName.getText().toString().toString();
        Intent intent = new Intent();
        intent.setClass(this, ChatActivity.class);
//      传递注册的名字
        intent.putExtra(EaseConstant.EXTRA_USER_ID, userId);
//      EMMessage.ChatType.Chat单聊,还有群聊和聊天室
        intent.putExtra(EaseConstant.EXTRA_CHAT_TYPE, EMMessage.ChatType.Chat);
        startActivity(intent);
    }


    /**
     * 退出登录
     */
    private void httpOutLogin() {
        EMClient.getInstance().logout(false, new EMCallBack() {

            @Override
            public void onSuccess() {
                // TODO Auto-generated method stub
                startActivity(new Intent(getBaseContext(), MainActivity.class));
                finish();

            }

            @Override
            public void onProgress(int progress, String status) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onError(int code, String message) {
                // TODO Auto-generated method stub
                Logger.t("MainActivity").d("退出登录失败" + code + ">>>" + message);

            }
        });
    }
}

activity_contact.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >
    <EditText
        android:id="@+id/etName"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:hint="聊天名称"
        />

    <Button
        android:id="@+id/btnChat"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="发起聊天" />

    <Button
        android:id="@+id/btnOutLogin"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="退出登录"
        />


</LinearLayout>

聊天 ChatActivity

public class ChatActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chat);
        initView();
        myOnClick();
    }
    public void initView() {
//      连接easeUi直接封装好的聊天界面
        EaseChatFragment easeChatFragment=new EaseChatFragment();
//      将参数传到聊天界面
        easeChatFragment.setArguments(getIntent().getExtras());
//      加载easeUi封装的聊天界面的fragment
        getSupportFragmentManager().beginTransaction().add(R.id.ec_layout_container,easeChatFragment).commit();

    }
    public void myOnClick() {

    }
}

activity_chat

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >
    <LinearLayout
        android:id="@+id/ec_layout_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        ></LinearLayout>

</LinearLayout>
版权声明:本文为博主原创文章,未经博主允许不得转载。

studio集成环信EaseUI

studio集成环信EaseUI,只是添加到项目中就遇到了很多问题,所以看这片文章的小伙伴,请耐心导入依赖后运行看看是否可以运行成功。一、下载官方资源sdk,http://www.easemob.co...
  • bobo89455100
  • bobo89455100
  • 2017年01月04日 16:36
  • 2176

Android环信EaseUI的快速集成

对于现在APP端的聊天功能一直是比较感兴趣的,借此闲暇时间来对EaseUI进行了一定的了解,从而写了一个测试的Demo 1.首先需要在环信平台进行开发者注册,https://console.e...
  • lf0814
  • lf0814
  • 2016年09月08日 17:38
  • 5212

Android如何快速集成环信EaseUI

关于环信easeui的使用问题
  • liyan605113281
  • liyan605113281
  • 2017年03月28日 14:51
  • 1900

Android如何快速集成环信EaseUI(最强修改版)

最近项目中要求实现即时通讯的功能,于是就找到了环信的即时通讯。
  • liyan605113281
  • liyan605113281
  • 2017年05月11日 15:56
  • 2022

Android使用EaseUI集成环信3.0

第一步:ChatFragment @Override public void onSetMessageAttributes(EMMessage message) { //设置消息扩展属性 ...
  • gggccy
  • gggccy
  • 2016年08月12日 21:35
  • 6224

ios 快速集成环信EaseUI

步骤1:导入sdk ,请看环信sdk集成api 步骤2:请看图 步骤3: 上面步骤会缺少表情, 表情请见3.0demo中的chatviewcontroller, EaseE...
  • lct710992308
  • lct710992308
  • 2015年12月02日 15:00
  • 1557

即时通信(环信) EaseUI 集成视频

http://community.easemob.com/video/23
  • jiaxin_1105
  • jiaxin_1105
  • 2016年04月20日 15:54
  • 629

集成环信的EaseUI 中遇到的一些坑(3.x)

SDK 采用模块化设计,每一模块的功能相对独立和完善,用户可以根据自己的需求选择使用下面的模块: EMClient: 是 SDK 的入口,主要完成登录、退出、连接管理等功能。也是获取其他模块的...
  • jyt199011302
  • jyt199011302
  • 2016年12月16日 15:46
  • 1861

【快速搞定】教你如何快速集成环信(android端EaseUI),跳过我踩过的坑

【快速搞定】教你如何快速集成环信(android端EaseUI),跳过我踩过的坑一、前言 最近,公司准备集成一个即时通讯的功能,于是我找到了环信,于是我就这样被坑了,于是就有了本文来教大家如何跳出...
  • qq137722697
  • qq137722697
  • 2016年08月13日 23:18
  • 14869

android端快速集成EaseUI,跳过那些坑

发现一篇很有用的博客,感谢大力哥的,文章原址:http://blog.csdn.net/qq137722697/article/details/52200355 【快速搞定】教你如何快速集成...
  • u011150924
  • u011150924
  • 2016年08月19日 09:07
  • 1769
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 使用集成环信EaseUI
举报原因:
原因补充:

(最多只允许输入30个字)