有没有办法在通话时运行 SpeechRecognizer?我是这样做的:
BroadcastReceiver
处理电话状态的变化(例如摘机)。SpeechRecognizer
在当前(主)线程中启动,因为它只能在主线程中启动。应用程序上下文用于识别器(当前上下文,给广播接收器,不能开始使用)
但不幸的是,另一边的人听不到我的声音(虽然语音识别工作正常)。在远处,识别器已经“消耗”了我的声音并且没有将它发送过来。
我知道在调用期间在主线程中执行操作是危险的,但是有没有办法在调用期间以某种方式运行识别器?
更新:我正在尝试使用 TelephonyManager
监听器而不是 BroadcastReceiver
,但是一些内部服务会受到 NPE 的影响。
最佳答案
据我所知,Android 端永远不会处理语音调用。应用处理器或通信处理器在任何给定时间都可以控制流,但不能同时控制两者。通常,一旦语音通话开始,麦克风和耳机的流控制就会交给通信处理器。奇怪的是,在您的情况下,应用程序处理器正在获得控制权。这看起来是一个错误。
音频流直接由通信处理器处理(这是有道理的,因为在应用处理器中执行两次,在最终将处理调用的通信处理器中执行一次是浪费处理)。所以我认为这是不可能的。
关于java - 在通话期间运行 SpeechRecognizer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11974218/