5

有没有办法在通话时运行 SpeechRecognizer?我是这样做的:

  • BroadcastReceiver处理电话状态的变化(例如摘机)。
  • SpeechRecognizer当前(主)线程中启动,因为它只能在主线程中启动。应用程序上下文用于识别器(当前上下文,给广播接收器,不能开始使用)

但不幸的是,另一边的人听不到我的声音(虽然语音识别工作正常)。在外面,识别器已经“消耗”了我的声音并且没有发送它。

我知道在调用期间在主线程中做事是危险的,但是有没有办法在调用期间以某种方式运行识别器?

更新:我正在尝试TelephonyManager侦听器而不是 a BroadcastReceiver,但是一些内部服务与 NPE 相冲突。

4

2 回答 2

2

AFAIK 语音通话永远不会从 Android 端处理。应用程序处理器或通信处理器在任何给定时间都可以控制流,而不是两者。通常,一旦语音通话开始,麦克风和耳机的流控制就会交给通信处理器。奇怪的是,在您的情况下,应用程序处理器正在获得控制权。这看起来是一个错误。

音频流直接由通信处理器处理(这是有道理的,因为在应用程序处理器中执行两次,在最终将处理呼叫的通信处理器中执行一次是浪费处理)。所以我认为这是不可能的。

于 2012-08-15T18:32:09.383 回答
0

根据电话型号,如果语音识别器在服务中实现是可能的。我对带有 android v4 的 HTC Rezound 没有任何问题,但是带有 android v2.3 的 Motorola Bionic 无法工作,因为音频管理器崩溃了。即使使用 HTC,识别器也无法听到另一部手机上的人的声音。在扬声器打开的情况下,它会保持报告错误不匹配。

于 2012-11-03T07:21:07.963 回答