本文主要介绍如何将 Talk Android SDK 实时对讲集成到你的项目中以及相关注意事项。
开发环境要求
- Android SDK API Level ≥ 19
- 如果你的 App 以 Android 9 及以上为目标平台,请关注 Android 隐私权变更。
- Android Studio 3.0 或以上版本。
- 一个有效的 开发者账号。
快速集成
本小节介绍如何获取 AppID 以及如何快速将 SDK 集成到项目中。
获取 AppID
参考以下步骤获取一个 AppID。若已经拥有 AppID,请跳过当前步骤,直接查看快速集成。
导入 SDK
- 方法 1:使用 Gradle 自动集成,在项目的
/app/build.gradle
文件添加以下代码
dependencies {
implementation 'io.anyrtc:talk:1.0.0.1'
}
-
方法2:手动复制 SDK 文件
- 下载最新版的 Talk SDK aar 包
- 将 SDK目录内的如下文件,拷贝到你的项目路径下:
文件 对应项目文件夹 artalk-release.aar ~/app/libs/
添加设备权限
打开 app/src/main/AndroidManifest.xml 文件,添加必要的设备权限。比如:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.INTERNET"/>
...
</manifest>
操作流程
本节内容主要介绍如何实现对讲登录、加入频道、上下麦,提供相关示例代码。
初始化客户端
在创建实例前,请确保你已完成环境准备,安装包获取等步骤。
创建实例需要填入准备好的 App ID
, 只有 App ID
相同的应用才能互通。
指定事件回调 ARTalkClientListener
,SDK 通过该回调通知应用程序:
- SDK 与 ARTalk 系统的连接状态变化;
- 上下麦结果通知,其他人上下麦通知;
- 其他相关事件。
private fun initArTalkClient() {
arTalkClient = ARTalkClient.createInstance(this, APPID, object : ARTalkClientListener {
override fun onRenewTokenResult(p0: String?, p1: Int) {
}
override fun onTokenWillExpire() {
}
override fun onTokenExpired() {
}
override fun onConnectionStateChanged(p0: Int, p1: Int) {
}
override fun onNetworkStatus(p0: Int, p1: Int) {
}
override fun onTalkLocalMicAudioData(
channelId: String?,
data: ByteArray?,
len: Int,
sampleHz: Int,
channel: Int
) {
}
override fun onTalkLocalSpeakerAudioData(
p0: String?,
p1: ByteArray?,
p2: Int,
p3: Int,
p4: Int
) {
}
override fun onTalkRecordFile(p0: String?, p1: String?) {
}
})
}
使用相同 App ID 的应用才能互相通信。
登录
APP 必须在登录 Talk 服务器之后,才可以使用 SDK 的对讲功能。在此之前,请确保 ARTalkClient
初始化完成。
- 用于登录对讲系统的动态密钥。开启动态鉴权后可用。集成及测试阶段请将 token 设置为空字符串。
- 登录对讲系统的用户ID
- 自定义信息
- 登录结果回调
登录成功之后,才可以实现对讲功能。
fun login() {
arTalkClient.login("", userId, "", object : ResultCallback<Void> {
// 登录成功
override fun onSuccess(var1: Void?) {
logAdapter.addData("登录成功")
}
// 登录失败
override fun onFailure(code: Int) {
logAdapter.addData("登录失败")
}
})
}
创建频道并加入
- 传入能标识每个频道的 ID。ID 为字符串,不能为空或者多于 64 个字符,也不能是字符串
"null"
。 - 指定一个频道监听器。SDK 通过回调通知应用程序频道的状态变化和运行事件等,如: 用户上下麦,上麦结果等。
private val arTalkChannelListener = object : ARTalkChannelListener {
override fun onPushToTalkResult(code: Int) {
}
override fun onPushToTalkEnded(code: Int) {
}
override fun onUserIsTalkOn(userId: String?, userData: String?, userLevel: Int) {
}
override fun onUserIsTalkOff(userId: String?, userData: String?) {
}
override fun onUserStreamOn(userId: String?, userData: String?) {
}
override fun onUserStreamOff(userId: String?, userData: String?) {
}
}
arTalkChannel = arTalkClient.createChannel("9191", arTalkChannelListener)
arTalkChannel?.join(object : ResultCallback<Void> {
override fun onSuccess(var1: Void?) {
logAdapter.addData("加入成功")
}
override fun onFailure(code: Int) {
logAdapter.addData("加入失败")
}
})
对讲
对讲包括:发送对讲,接收对讲。
申请上麦
调用 arTalkChannel.pushToTalk
方法申请对讲。在该方法中:
- talkOnTime 表示对讲时间。 0=无限制;时间单位:秒
//先打开麦克风
arTalkClient.enableAudioCapture(true)
arTalkChannel.pushToTalk(0)
下麦
调用 arTalkChannel.stopPushToTalk
方法下麦:
//关闭麦克风
arTalkClient.enableAudioCapture(false)
arTalkChannel.stopPushToTalk()
其他人上麦下麦
见 onUserIsTalkOn(String userId,String userData,int userLevel)
、 onUserIsTalkOff(String userId,String userData)
回调
离开频道
离开频道并释放:arTalkChannel.leave()
、arTalkChannel.release()
退出登录
退出登录:arTalkClient.logout(null)
开发注意事项
-
ARTalk 支持创建多个相互独立的 ARTalkChannel 实例。
-
在收发对讲或进行其他频道操作前,请确保你已成功登录 ARTalk 系统(即确保已经收到 onSuccess)。
-
使用频道核心功能前必须通过调用 createChannel 方法创建频道实例。
-
当离开了频道且不再加入该频道时,可以调用 release 方法及时释放频道实例所占用的资源。