Android使用指南

更新时间: 2025-07-03 13:22:10

本文将介绍如何通过AICallKit SDK集成音视频智能体到您的Android应用中。

环境要求

  • Android Studio 插件版本4.1.3

  • Gradle 7.0.2

  • Android Studio自带JDK11

业务流程

image

您的App通过AppServer(你的业务服务器)获取RTC Token,便可调用call(config)方法进入通话,在通话过程中,可以调用AICallKit的API实现智能体的实时字幕、打断等交互功能。AICallKit依赖于实时音视频能力,因此在内部已实现AliVCSDK_ARTC SDK的相关功能。如果您的业务场景还需要用到直播与点播能力,可以使用音视频终端组合SDK,例如AliVCSDK_StandardAliVCSDK_InteractiveLive,具体组合方式,请参考SDK选择与下载

集成SDK

  1. 在项目级build.gradle项目文件中添加阿里云Maven仓库。

    allprojects {
        repositories {
            google()
            jcenter()
            maven { url 'https://maven.aliyun.com/repository/google' }
            maven { url 'https://maven.aliyun.com/repository/public' }
        }
    }
  2. 在相应build.gradle项目文件下,引入ARTCAICallKit依赖项。

    dependencies {
        implementation 'com.aliyun.aio:AliVCSDK_ARTC:7.3.0'                  //修改x.x.x为你工程适配的版本
        implementation 'com.aliyun.auikits.android:ARTCAICallKit:2.6.0'
        implementation 'com.squareup.okhttp3:okhttp:4.10.0' //第三方依赖库,请确认最新版本
    }
    说明

    ARTC SDK版本请到SDK下载/集成最新适配版本号。

SDK开发指南

步骤一:申请APP音视频权限

检查APP麦克风、摄像头权限,如未授权,则弹框交给用户进行授权。业务App需要您自行实现, 参考代码请参见PermissionUtils.java

PermissionX.init(this)
.permissions(PermissionUtils.getPermissions())
.request((allGranted, grantedList, deniedList) -> {
});

步骤二:创建&初始化引擎

创建&初始化ARTCAICallEngine引擎,示例代码如下:

String userId = "123";  // userId推荐使用你的App登录后的用户id
ARTCAICallEngineImpl engine = new ARTCAICallEngineImpl(this, userId);

 // 如果是数字人类型,则需要配置数字人显示的视图容器
if (aiAgentType == AvatarAgent) {
    ViewGroup avatarlayer;
    engine.setAgentView(
        avatarlayer,
        new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                                   ViewGroup.LayoutParams.MATCH_PARENT)
    );
}
// 如果是视觉理解类型,则需要配置本地视频预览显示的视图容器
else if (aiAgentType == VisionAgent) {
    ViewGroup previewLayer;
    engine.setLocalView(previewLayer,
        new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                                     ViewGroup.LayoutParams.MATCH_PARENT)
    );
} else if(aiAgentType == VideoAgent) {
    ARTCAICallEngine.ARTCAICallVideoCanvas remoteCanvas = new ARTCAICallEngine.ARTCAICallVideoCanvas();
            remoteCanvas.zOrderOnTop = false;
            remoteCanvas.zOrderMediaOverlay = false;
    ViewGroup avatarlayer;
    engine.setAgentView(
        avatarlayer,
        new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                                   ViewGroup.LayoutParams.MATCH_PARENT), remoteCanvas
    );

    ViewGroup previewLayer;
    engine.setLocalView(previewLayer,
        new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                                     ViewGroup.LayoutParams.MATCH_PARENT)
    );

}

步骤三:实现回调方法

实现引擎回调,按需实现回调方法。引擎回调接口详情,请参见API接口详情

protected ARTCAICallEngine.IARTCAICallEngineCallback mCallEngineCallback = new ARTCAICallEngine.IARTCAICallEngineCallback() {
    @Override
    public void onErrorOccurs(ARTCAICallEngine.AICallErrorCode errorCode) {
        // 发生了错误,结束通话
        engine.handup();
    }

    @Override
    public void onCallBegin() {
        // 通话开始(入会)
    }

    @Override
    public void onCallEnd() {
        // 通话结束(离会)
    }

    @Override
    public void onAICallEngineRobotStateChanged(ARTCAICallEngine.ARTCAICallRobotState oldRobotState, ARTCAICallEngine.ARTCAICallRobotState newRobotState) {
        // 机器人状态同步
    }

    @Override
    public void onUserSpeaking(boolean isSpeaking) {
        // 用户说话回调
    }

    @Override
    public void onUserAsrSubtitleNotify(String text, boolean isSentenceEnd, int sentenceId, VoicePrintStatusCode voicePrintStatusCode) {
    
    }

    @Override
    public void onAIAgentSubtitleNotify(String text, boolean end, int userAsrSentenceId) {
        // 同步智能体回应的话
    }

    @Override
    public void onNetworkStatusChanged(String uid, ARTCAICallEngine.ARTCAICallNetworkQuality quality) {
        // 网络状态回调
    }

    @Override
    public void onVoiceVolumeChanged(String uid, int volume) {
        // 音量变化
    }

    @Override
    public void onVoiceIdChanged(String voiceId) {
        // 当前通话的音色发生了改变
    }

    @Override
    public void onVoiceInterrupted(boolean enable) {
        // 当前通话的语音打断设置改变
    }

    @Override
    public void onAgentVideoAvailable(boolean available) {
        // 智能体视频是否可用(推流)
    }

    @Override
    public void onAgentAudioAvailable(boolean available) {
        // 智能体音频是否可用(推流)
    }

    @Override
    public void onAgentAvatarFirstFrameDrawn() {
        // 数字人首视频帧渲染
    }

    @Override
    public void onUserOnLine(String uid) {
        // 用户上线回调
    }

};

engine.setEngineCallback(mCallEngineCallback);

步骤四:创建并初始化ARTCAICallConfig

ARTCAICallConfig详情,请参见ARTCAICallConfig

ARTCAICallEngine.ARTCAICallConfig artcaiCallConfig = new ARTCAICallEngine.ARTCAICallConfig();
artcaiCallConfig.agentId = "XXX";            //智能体ID,必填
artcaiCallConfig.region = "cn-shanghai";//智能体区域,必填
artcaiCallConfig.agentType = VoiceAgent;//定智能体的类型:纯语音、数字人、视觉理解、视频通话
engine.init(artcaiCallConfig);

地域名称

Region Id

华东1(杭州)

cn-hangzhou

华东2(上海)

cn-shanghai

华北2(北京)

cn-beijing

华南1(深圳)

cn-shenzhen

新加坡

ap-southeast-1

步骤五:发起智能体呼叫

调用call()接口发起智能体呼叫。获取鉴权Token,请参见生成ARTC鉴权Token。在开启通话后,您可以根据您的业务需求处理字幕、打断智能体讲话等。详细内容,请参见功能实现

engine.call(token);

//接通后,会触发以下回调
public void onCallBegin() {
        // 通话开始(入会)
}

步骤六:通话中的业务实现

在开启通话后,您可以根据您的业务需求处理字幕、打断智能体讲话等。详细内容,请参见功能实现

步骤七:通话结束,挂断智能体通话

调用handup()接口,挂断智能体通话。

engine.handup();
上一篇: 不含UI集成方案 下一篇: 数据结构