什么是 Voice Interaction API?它与 Actions on Google 有何关系?

解读

面试官抛出该题,核心想验证三件事:

  1. 你是否真的在 Android 端做过语音交互,还是只停留在“调用语音识别”层面;
  2. 能否把 Android 系统级语音能力(Voice Interaction API)与云端生态(Actions on Google)区分开,并讲清它们如何协同;
  3. 对国内“去 GMS”环境有没有落地经验,能否给出替代方案。
    回答时务必先给出“定义+结构+生命周期”,再用一句话点明“Actions on Google 只是 Voice Interaction 的一种云端实现”,最后补一句国内无 GMS 时的解法,就能拿到高分。

知识点

  1. Voice Interaction API 是 Android 5.0 引入的系统级框架,位于 android.service.voice 包,运行在 always-on 的 system_server 进程侧,与 SystemUI、Launcher 同权。
  2. 三大组件:
    • VoiceInteractionService:注册在 Manifest,生命周期由 system_server 绑定,负责热词下载、离线模型更新。
    • VoiceInteractionSession:每次用户说“小X小X”时由系统 createSession() 拉起,提供 onCreate()、onShow()、onHide()、onDestroy() 回调,类比 Activity 但无窗口。
    • Request/Command:系统把语音语义封装成 VoiceInteractor.Request 对象,通过 Binder 发给 Session,Session 返回 Command 列表,系统再分发给目标 App 的 AssistReceiver。
  3. 与语音识别区别:Voice Interaction 走的是“低功耗音频通路 + 热词触发”,不经过普通 MIC,CPU 处于 suspend 时 DSP 仍可监听;而 SpeechRecognizer 必须亮屏解锁且走正常 MIC。
  4. Actions on Google 是 Google Assistant 的云技能平台,开发者用 Actions Builder 写对话流,部署后 Google Assistant 把语义解析结果通过 Android 的 AssistStructure 和 Bundle 回传,恰好由 VoiceInteractionSession 接收,因此二者是“云端技能 ↔ 系统端 Session”的对接关系。
  5. 国内无 GMS 时,华为/OPPO/vivo 均自建 VoiceService 接入自家语音助手,接口仍复用 Android 原生的 VoiceInteractionService,只是把 Google Assistant 替换为厂商云,APK 不用改代码即可兼容。

答案

Voice Interaction API 是 Android 系统提供的本地语音交互框架,包含 VoiceInteractionService 与 VoiceInteractionSession 两大组件。Service 负责常驻监听热词,Session 负责一次完整的对话上下文。它与 Actions on Google 并非同一层:Actions on Google 是跑在 Google 云端的技能平台,当用户说出已注册的指令时,Google Assistant 把解析好的语义通过系统 Assist API 下发,恰好由 VoiceInteractionSession 接收并执行,因此二者是“云端技能 + 系统端通道”的协作关系。在国内没有 GMS 的场景,厂商会用自己的语音助手替代 Google Assistant,但 Android 框架层仍使用同一套 Voice Interaction API,应用侧无需改动。

拓展思考

  1. 折叠屏/车载场景下,系统可能同时存在两个语音交互入口(屏幕侧边的麦克风阵列 + 蓝牙远场),需要在 VoiceInteractionService 里根据 AudioSource 区分 near-field 与 far-field,避免双触发。
  2. 隐私沙盒(Android 14 Privacy Sandbox)要求敏感权限前台一次性授予,VoiceInteractionService 若要读取联系人、短信,必须在 onShow() 里动态申请,且用户拒绝后系统会直接 kill Session,需要做好降级到文本输入的兜底。
  3. 国内上线应用市场时,厂商会扫描 Manifest 中是否声明 VoiceInteractionService,若未配套提供国内技能平台配置文件(如华为 skills.json),会被判定为“引流到 Google 服务”,审核直接驳回;解决方法是建两套 flavor,海外 flavor 声明 Google Assistant,国内 flavor 声明厂商 VoiceService,共用同一套 Session 代码。