使用 JusTalk Cloud SDK for Android

简介

本文档介绍如何导入和初始化 JusTalk Cloud SDK for Android(以下简称 SDK)。请完成准备环境、准备 SDK 文件、拷贝文件、配置权限和初始化。

准备环境

请确保开发环境满足以下要求:

* Android Studio 2.2 或更高版本(暂不支持 2.3) 
* Android SDK Level 16 或更高  
* 支持语音及视频功能的真机  

若您对 Android 开发环境有特殊需求,请联系我们

准备 SDK 文件

若你还未获取 SDK,请前往下载页面,下载最新的 SDK 文件。

解压下载的压缩包后,您将得到简易的 sample 工程,如下图:

SDK 由以下文件组成:

名称 描述
libmtc.so 基础业务库
libzmf.so 媒体设备管理库
mtc.jar 基础业务接口包
zmf.jar 媒体设备管理接口包

导入文件

1. 拷贝文件
将 SDK 文件中 libs 目录下的 armeabi-v7a、mdm.jar、mtc.jar 和 zmf.jar 复制到您的工程对应目录下。若您需要支持 x86 架构的设备,请将 libs 目录下的 x86 也拷贝址对应目录。

2. 配置 Gradle
为确保能连接我们的 so 库,请在您工程 build.gradle 文件中增加以下配置: 代码如下:

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

配置权限

SDK 需要以下权限:

  • 访问网络:用于通信。
  • 网络状态监听:用于应对网络切换、闪断。
  • 手机设备信息:用于自动适配设备,保证最佳效果。
  • 摄像头:用于获取视频数据。
  • 录音:用于获取音频数据。
  • 读写存储:用于写入日志文件,记录 SDK 运行状态。

1.请在工程配置文件 AndroidManifest.xml 中添加如下权限:

 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
 <uses-permission android:name="android.permission.READ_PHONE_STATE" />

 <uses-permission android:name="android.permission.CAMERA" />

 <uses-permission android:name="android.permission.RECORD_AUDIO" />

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2.请先检查您项目编译配置的 build.gradle 文件中的 targetSdkVersion,如下图:

若工程的 targetSdkVersion 为 23 或以上,请确保在执行任意 SDK 接口前通过 ActivityCompat.requestPermissions 接口向用户获取如下权限:

 Manifest.permission.WRITE_EXTERNAL_STORAGE
 Manifest.permission.READ_PHONE_STATE
 Manifest.permission.RECORD_AUDIO
 Manifest.permission.CAMERA

3.若应用程序中需要用到视频功能,除获取视频数据权限外,您还需要在 AndroidManifest.xml 中添加摄像头硬件使用声明,以过滤不支持的硬件设备:

 <uses-feature android:name="android.hardware.camera" />
 <uses-feature android:name="android.hardware.camera.autofocus" />

初始化

在操作任何业务之前,您的 APP 界面代码(以下简称 UI)应该首先创建 SDK 的 JCEngine 对象

你可以在需要用到 SDK 功能时再创建 JCEngine 对象,代码如下。
MY_APP_KEY 应设置为你的 AppKey。如何获取 AppKey 请参考在平台上注册并创建应用。
eventHandler 应设置为 JCEngineEventHandler 的实现对象,以获取 SDK 运行中的事件通知。

 mJCEngine = JCEngine.create(context.getApplicationContext(), MY_APP_KEY, eventHandler);
 // state == JCEngine.STATE_INIT 表示初始化成功
 int state = mJCEngine.getState();

JCEngine 对象创建时会对 SDK 进行初始化操作,若初始化过程中出现错误,SDK 会通过JCEngineEventHandler.onError(errorCode) 通知错误JCEngine.ERROR_STATE_INVALID,通过 JCEngine.getState() 方法获取具体原因。

SDK 导入和初始化常见问题

  1. 调用初始化接口后,程序崩溃,且报以下错误:
JNI DETECTED ERROR IN APPLICATION: 
 JNI FindClass called with pending exception
 java.lang.SecurityException: 
  getDeviceId: 
  Neither user 10246 nor current process has 
  android.permission.READ_PHONE_STATE.

程序未获取权限,请参考配置权限章节,正确配置程序权限。