java - 如何在Android中设置默认模式耳机

标签 java android voip

我正在开发 VoIP 应用程序,当用户拔下耳机然后设备自动切换到扬声器时遇到问题,但我希望设备切换到普通扬声器。有什么办法可以将其更改为普通扬声器吗?

最佳答案

棘手的事情,尤其是多个设备、不同的场景。
我曾开发过一款 VoIP 应用程序,所以我才知道这一点。您所面临的可能是因为在请求焦点后正在手动处理音频管理器模式和/或流。您需要做的是将控制权转移到调用流,以便在调用进行时,
耳机的连接和断开、转接至手机听筒等均由操作系统自动处理

您可能会执行所有这些操作或组合执行...

使用AudioManager { .setMode(int mode) } - 使用MODE_IN_COMMUNICATION ,推荐用于 VoIP 或 MODE_IN_CALL

另外,请检查STREAM_VOICE_CALL

你在使用吗 -isSpeakerphoneOn()setSpeakerphoneOn(boolean) -isBluetoothScoOn() , setBluetoothScoOn(boolean)

需要针对设备或耳机型号的特定问题尝试解决所有这些问题。

有用的东西:

Even if a SCO connection is established, the following restrictions apply on audio output streams so that they can be routed to SCO headset:

  • the stream type must be STREAM_VOICE_CALL
  • the format must be mono
  • the sampling must be 16kHz or 8kHz

关于java - 如何在Android中设置默认模式耳机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44410837/

相关文章:

java - java中两个线程之间共享数据

java - JInternalFrame 不显示

android - 在 Google Play 游戏服务中跟踪输赢

android - 在 Android 上实现 App-to-App 调用

java - 我不能在 2 个 Activity 之间传递太大的对象数组列表?

java - 为什么这两个弧重叠?

c# - 如何平滑路径图的WPF线段

java - 为什么我不能从新线程中发送 android Intent ?

networking - 为什么RTP使用UDP而不是TCP?

android - 如何在 Android 中集成 SIP/Voip 以进行内部(即分机)调用