快速入门

最近更新时间:2023-02-22 03:25:48

本文主要介绍如何将 Talk Android SDK 实时对讲集成到你的项目中以及相关注意事项。

开发环境要求

  • Android SDK API Level ≥ 19
  • 如果你的 App 以 Android 9 及以上为目标平台,请关注 Android 隐私权变更
  • Android Studio 3.0 或以上版本。
  • 一个有效的 开发者账号

快速集成

本小节介绍如何获取 AppID 以及如何快速将 SDK 集成到项目中。

获取 AppID

参考以下步骤获取一个 AppID。若已经拥有 AppID,请跳过当前步骤,直接查看快速集成

  • 1. 创建项目

    首先我们需要在开发者控制台创建一个「项目」

  • 2. 获取 APP ID

    获取项目的「APP ID」

导入 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 方法及时释放频道实例所占用的资源。