帮你快速理解、总结文档立即下载

Android 智能设备

最近更新时间:2026-09-10 14:51:32
我的收藏
本文将介绍设备如何在 Android 平台接入 AI 语音对话 能力,实现与云端智能体的实时语音交互文本消息收发对话打断以及语义触发联系人呼叫,帮助您快速了解 AI 语音对话的功能。

前提条件

在开始之前,请您先完成以下步骤,若您已经完成对应的步骤,可跳过:
1. 您需要先 注册腾讯云 账号,并完成 实名认证
2. 购买了 腾讯云物联网开发平台 相关实例,开通并激活了 智能语音增值服务
3. 物联网开发平台控制台 拿到了本 Demo 所需要的设备三元组(已经激活过了)。
4. 完成 登录与注册 文档中的跑通登录功能。
说明:
AI 对话服务属于增值服务,必须开通此增值服务后激活设备 license 才可以正常使用。
AI 语音对话依赖麦克风采集与扬声器播放,请确保已在 AndroidManifest.xml 中声明 android.permission.RECORD_AUDIO 权限,并在运行时向用户申请授权,同时请确认该设备所属产品已在控制台开通 AI 对话服务,否则将返回 TXIoTError.AITALK_NOT_ACTIVATED

接入步骤

步骤 1:注册回调

登录成功后,通过 TXIoTAITalkSession.getInstance().addListener 注册 TXIoTAITalkSession.Listener,AI 语音对话相关的回调如下:
回调
说明
onReceiveAsrText
收到用户语音的 ASR 识别结果文本时触发,可用于在屏幕上展示用户说话内容。
onReceiveBotText
收到智能体回复的文本时触发,可用于在屏幕上展示机器人的应答内容。
onBotStateChanged
智能体状态发生变化时触发,携带 oldStatenewState(详见 BotState),可用于驱动设备指示灯、屏幕动效等交互状态。
onLaunchCall
智能体根据语义识别到需要呼叫某位联系人时触发,携带 Contact(联系人信息),设备可据此发起音视频通话(需先注册联系人,详见 参数准备)。
onError
AI 对话发生错误时触发,携带 errorCodeerrorMsg,常见错误码详见 常见问题
TXIoTAITalkSession.Listener listener = new TXIoTAITalkSession.Listener() {
@Override
public void onReceiveAsrText(String text) {
// 用户语音的识别结果,可显示到屏幕
}

@Override
public void onReceiveBotText(String text) {
// 智能体回复的文本,可显示到屏幕
}

@Override
public void onBotStateChanged(TXIoTAITalkSession.BotState oldState,
TXIoTAITalkSession.BotState newState) {
// 根据 newState 更新设备指示灯、屏幕或其他交互状态
}

@Override
public void onLaunchCall(TXIoTAITalkSession.Contact contact) {
// 智能体语义触发联系人呼叫,可据此发起音视频通话
}

@Override
public void onError(int errorCode, String errorMsg) {
// 记录 errorCode 和 errorMsg,并停止或重试业务流程
}
};

TXIoTAITalkSession.getInstance().addListener(listener);

步骤 2:参数准备

开始对话前,可通过 TXIoTAITalkSession.Params 指定使用的智能体及自定义提示词变量,可通过 List<TXIoTAITalkSession.Contact>注册联系人让智能体根据语义触发联系人呼叫,最多可注册 10 位联系人。
TXIoTAITalkSession.Params params = new TXIoTAITalkSession.Params();
params.botId = ""; // 为空则使用平台默认智能体
params.promptVariablesJson = ""; // 自定义提示词变量,可为空

// 可选:注册联系人,供智能体语义触发呼叫,最多可注册 10 位联系人
List<TXIoTAITalkSession.Contact> contacts = new ArrayList<>();
TXIoTAITalkSession.Contact contact = new TXIoTAITalkSession.Contact();
contact.userId = "USER_ID";
contact.userName = "USER_NAME";
contacts.add(contact);

步骤 3:开始对话

调用 startSpeak 开始 AI 语音对话,该接口为异步调用,开始成功后即可进入语音交互。相关接口如下:
aiTalkSession.startSpeak(params, contacts, new TXIoTCallback() {
@Override
public void onSuccess() {
// 对话已就绪,可开始语音交互
Log.i(TAG, "startSpeak success");
}

@Override
public void onError(int code, String desc) {
Log.e(TAG, "startSpeak failed: " + code + ", " + desc);
}
});

步骤 4:发送文本与打断(可选)

对话过程中,除语音交互外,还可通过以下接口进行文本输入与打断控制。以下接口返回 0TXIoTError.SUCCESS)表示调用成功。
// 发送文本消息
int ret = aiTalkSession.sendText("今天天气怎么样?");
if (ret != TXIoTError.SUCCESS) {
Log.e(TAG, "sendText failed: " + ret);
}

// 打断智能体当前播报
aiTalkSession.interrupt();

步骤 5:停止对话

结束对话时,调用 stopSpeak 停止 AI 语音对话,并在页面销毁时移除监听器释放资源:
aiTalkSession.stopSpeak();
aiTalkSession.removeListener(listener);

示例代码

package com.example.iotdemo;

import android.os.Bundle;
import android.util.Log;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.tencent.liteav.iot.TXIoTAITalkSession;
import com.tencent.liteav.iot.TXIoTCallback;
import com.tencent.liteav.iot.TXIoTError;

import java.util.ArrayList;
import java.util.List;

public class AITalkActivity extends AppCompatActivity {

private static final String TAG = "AITalkActivity";

private TXIoTAITalkSession mAITalkSession;

private final TXIoTAITalkSession.Listener mListener = new TXIoTAITalkSession.Listener() {
@Override
public void onReceiveAsrText(String text) {
Log.i(TAG, "asr text: " + text);
// 将用户语音识别结果显示到屏幕
}

@Override
public void onReceiveBotText(String text) {
Log.i(TAG, "bot text: " + text);
// 将智能体回复文本显示到屏幕
}

@Override
public void onBotStateChanged(TXIoTAITalkSession.BotState oldState,
TXIoTAITalkSession.BotState newState) {
Log.i(TAG, "bot state: " + oldState + " -> " + newState);
// 根据 newState 更新交互状态
}

@Override
public void onLaunchCall(TXIoTAITalkSession.Contact contact) {
Log.i(TAG, "launch call to: " + contact.userName);
// 智能体语义触发呼叫,可据此发起音视频通话
}

@Override
public void onError(int errorCode, String errorMsg) {
Log.e(TAG, "aitalk error: " + errorCode + ", " + errorMsg);
}
};

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_aitalk);

// 前提:SDK 已完成初始化并登录成功(参见「登录与注册」)
mAITalkSession = TXIoTAITalkSession.getInstance();
mAITalkSession.addListener(mListener);

startAITalk();
}

private void startAITalk() {
// 组装对话参数
TXIoTAITalkSession.Params params = new TXIoTAITalkSession.Params();
params.botId = ""; // 为空则使用平台默认智能体
params.promptVariablesJson = null;

// 可选:注册联系人,供智能体语义触发呼叫
List<TXIoTAITalkSession.Contact> contacts = new ArrayList<>();
TXIoTAITalkSession.Contact contact = new TXIoTAITalkSession.Contact();
contact.userId = "USER_ID";
contact.userName = "爸爸";
contacts.add(contact);

// 异步开始对话
mAITalkSession.startSpeak(params, contacts, new TXIoTCallback() {
@Override
public void onSuccess() {
Log.i(TAG, "startSpeak success");
// 对话已就绪,可开始语音交互;也可直接发送文本
int ret = mAITalkSession.sendText("你好");
if (ret != TXIoTError.SUCCESS) {
Log.e(TAG, "sendText failed: " + ret);
}
}

@Override
public void onError(int code, String desc) {
Log.e(TAG, "startSpeak failed: " + code + ", " + desc);
}
});
}

@Override
protected void onDestroy() {
// 释放资源
mAITalkSession.stopSpeak();
mAITalkSession.removeListener(mListener);
super.onDestroy();
}
}

常见问题

现象
排查建议
启动 AI 对话返回 AITALK_NOT_ACTIVATED(-204)
设备的 TWeTalk license 未激活,请确认已开通服务并完成设备 license 激活。
未收到机器人音频
确认 startSpeak 是否回调成功。
收不到 onLaunchCall 回调
确认在 startSpeak 时传入了有效的联系人列表;确认用户语音中提及的联系人名称与注册的 userName 能够匹配。
接口调用返回 NOT_LOGGED_IN(-15)
AI 对话相关接口必须在登录成功后调用,请确认设备已成功登录(参见 登录与注册)。

联系我们

如果您在接入或使用过程中有任何疑问或者建议,欢迎 联系我们 提交反馈。