Android 及时通信(环信)

本文详细介绍了如何在Android应用中集成环信SDK,包括下载SDK、新建工程、导入SDK、添加权限和配置、初始化、注册与登录等步骤,以实现即时通讯和音视频聊天功能。集成环信SDK可以简化开发过程,提高效率,并减少潜在问题。
摘要由CSDN通过智能技术生成


如果自己来写一个类似微信的音视频聊天软件虽然能实现功能,但是实现过程还是比较麻烦,周期也比较长,可能最后出来漏洞也比较多,直接引入第三方的就省事很多,本文简单描述一下将环信SDK集成在Android应用中。

下载SDK

进入到官网:
在这里插入图片描述
在这里插入图片描述
下载完成后解压出来有如下文件夹:
在这里插入图片描述

  • doc:SDK 相关 API 文档
  • examples:ChatDemoUI3.0(Demo,依赖 EaseUI 库)、EaseUI
  • libs.av:包含IM和实时音视频功能所需要的 jar 和 so 文件
  • libs.lite:无实时语音、实时视频功能的 SDK 包,如果项目中只用到聊天功能,可以把项目里的 jar 和 so 文件替换成此文件夹里的文件
  • tools:从 SDK2.x 升级到 3.0的工具

本文只需要用libs.av目录里面这两个东西:
在这里插入图片描述

新建工程

在这里插入图片描述

导入SDK

直接复制到libs目录下:
在这里插入图片描述

sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }

在这里插入图片描述

添加权限和配置

<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" />

如下配置写到application节点中:

<meta-data
  android:name="EASEMOB_APPKEY"
  android:value="Appkey" />
<!-- 声明SDK所需的service SDK核心功能 -->
<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>

<service
   android:name="com.hyphenate.chat.EMJobService"
   android:exported="true"
   android:permission="android.permission.BIND_JOB_SERVICE" /> <!-- 声明SDK所需的receiver -->
<service
   android:name="com.hyphenate.chat.EMChatService"
   android:exported="true" />

在这里插入图片描述
上面的AppKey需要到官网去获取:
在这里插入图片描述
在这里插入图片描述
注册账户并登录:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
将这个AppKey复制到代码对应位置后基本配置引入完成了。

初始化

在这里插入图片描述
在这里插入图片描述
ECApplication代码如下:

import android.app.ActivityManager;
import android.app.Application;
import android.content.pm.PackageManager;
import android.util.Log;
import com.hyphenate.chat.EMClient;
import com.hyphenate.chat.EMOptions;
import java.util.Iterator;
import java.util.List;

public class ECApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        initEasemob();
    }

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

        int pid = android.os.Process.myPid();
        String processAppName = getAppName(pid);
// 如果APP启用了远程的service,此application:onCreate会被调用2次
// 为了防止环信SDK被初始化2次,加此判断会保证SDK被初始化1次
// 默认的APP会在以包名为默认的process name下运行,如果查到的process name不是APP的process name就立即返回

        if (processAppName == null ||!processAppName.equalsIgnoreCase(this.getPackageName())) {
            Log.e("ECApplication", "enter the service process!");

            // 则此application::onCreate 是被service 调用的,直接返回
            return;
        }

//初始化
        EMClient.getInstance().init(this, options);
//在做打包混淆时,关闭debug模式,避免消耗不必要的资源
        EMClient.getInstance().setDebugMode(true);
    }

    private String getAppName(int pID) {
        String processName = null;
        ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
        List l = am.getRunningAppProcesses();
        Iterator i = l.iterator();
        PackageManager pm = this.getPackageManager();
        while (i.hasNext()) {
            ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo) (i.next());
            try {
                if (info.pid == pID) {
                    processName = info.processName;
                    return processName;
                }
            } catch (Exception e) {
                // Log.d("Process", "Error>> :"+ e.toString());
            }
        }
        return processName;
    }
}

编译的时候出现类似如下错误:
在这里插入图片描述
添加如下即可:

compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

在这里插入图片描述
如果编译运行没错就算集成成功,之后就可以使用API接口了。

基础功能

官方网站中可以看到基础功能介绍,例如用户注册和登录:

注册

注册模式分两种,开放注册和授权注册。只有开放注册时,才可以客户端注册。
开放注册是为了测试使用,正式环境中不推荐使用该方式注册环信账号;
授权注册的流程应该是您服务器通过环信提供的 REST API 注册,之后保存到您的服务器或返回给客户端。
注册用户名会自动转为小写字母,所以建议用户名均以小写注册。(强烈建议开发者通过后台调用 REST 接口去注册环信 ID,客户端注册方法不提倡使用。)

//注册失败会抛出HyphenateException
EMClient.getInstance().createAccount(username, pwd);//同步方法

登录

注意:除了注册监听,其他的 SDK 操作均需在登陆之后才能进行。

EMClient.getInstance().login(userName,password,new EMCallBack() {//回调
    @Override
    public void onSuccess() {
            Log.d("main", "登录聊天服务器成功!");		
    }

    @Override
    public void onProgress(int progress, String status) {

    }

    @Override
    public void onError(int code, String message) {
        Log.d("main", "登录聊天服务器失败!");
    }
});

简单布局一下:
在这里插入图片描述
在登录按钮点击事件中调用登录接口即可:
在这里插入图片描述
demo代码下载地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xflySnail

码字不易,鼓励鼓励...

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值