在通话期间运行SpeechRecognizer

时间:2012-08-15 17:35:49

标签: java android

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

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

但不幸的是,另一方的人听不到我的声音(虽然语音识别工作正常)。在外面,识别器已经消耗了#34;我的声音,并没有发送过来。

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

更新:我正在尝试TelephonyManager监听器而不是BroadcastReceiver,但是一些内部服务会受到NPE的攻击。<​​/ p>

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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