java - 在通话期间运行 SpeechRecognizer

标签 java android

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

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

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

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

更新:我正在尝试使用 TelephonyManager 监听器而不是 BroadcastReceiver,但是一些内部服务会受到 NPE 的影响。

最佳答案

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

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

关于java - 在通话期间运行 SpeechRecognizer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11974218/

相关文章:

android - 将 Gradle 依赖项 res 复制到另一个 Gradle 依赖项

java - Android:将 Extras (ArrayList) 发送到任何 Activity

c# - 如何在凝视时保持旋转 GameObject?

java - 编译器不喜欢重写

java - Jetty/Tomcat 需要用 Java 构建网页吗?

java - 另一个 jdbc :mysql no suitable driver, Spring+Hibernate

java - 如何使用 jdbc 打破表中的列

android - 如何将 1 米更改为像素距离?

Java 代码跳过第一个 if 条件并跳过其他条件

java - android studio 中包含文件的包或文件夹