对于使用 Android语音识别 API的每个人,曾经有一个方便的RecognitionListener可以注册,它将各种事件推送到您的回调。特别是,有以下onBufferReceived(byte[])
方法:
public abstract void onBufferReceived (byte[] buffer)
自:API Level 8收到更多声音。此功能的目的是允许向用户提供有关捕获的音频的反馈。不保证会调用此方法。
参数
buffer
包含表示单通道音频流的大端 16 位整数序列的缓冲区。采样率取决于实现。
尽管该方法明确声明不能保证它会被调用,但在 ICS 和之前的版本中,它会在 100% 的时间内有效地被调用:至少,通过连接以这种方式接收的所有字节,您可以重建整个音频流并播放。
然而,出于某种原因,在 Jellybean SDK 中,这神奇地停止了工作。没有弃用通知,代码仍然可以编译,但onBufferReceived
现在从未调用过。从技术上讲,这并没有破坏他们的 API(因为它说“不能保证”该方法会被调用),但显然这对于许多依赖于这种行为的事情来说是一个重大变化。
有人知道为什么禁用此功能,是否有办法在 Jellybean 上复制其行为?
澄清:我意识到整个RecognizerIntent
事情是一个具有多种实现的接口(包括一些在 Play 商店中可用的),并且他们每个人都可以选择如何处理RecognitionListener
. 我特别指的是绝大多数 Jellybean 手机使用的默认 Google 实现。