1

从蓝牙耳机连接到耳机断开连接时,我试图保持蓝牙 sco 连接到运行 android 的设备,或者更具体地说,我希望 sco 链接在蓝牙耳机连接时不会被应用程序拆除。用户可以在 VOIP 呼叫菜单中选择 BT/扬声器图标按钮并拆除并恢复 sco 链接(因为它是用户启动的)。

当使用蓝牙耳机结束 VOIP 通话(例如,whatsApp、google hangouts、skype、viber 等)时,sco 链接会被断开。我希望 sco 链接在 VOIP 呼叫结束时不被拆除(首选操作)或通过“某些”机制重新建立。

我尝试过的事情(没有成功):

1) 尝试检测 VOIP 呼叫开始/结束但阅读其他 SO 帖子,看起来这是不可能的。有很多钩子可以检测基于 sim 的呼叫并结束,但不适用于基于 VOIP 的呼叫。

2) 使用 startVoiceRecognition() 启动 sco,如下所示。这似乎工作......几乎......

audioManager.setMode(MODE_IN_COMMUNICATION)
audioManager.startVoiceRecognition()

这种方法有两个问题。

  • 传入的 WhatsApp 调用会破坏使用 startVoiceRecognition() api 建立的 sco
  • 在 VOIP 通话(环聊、whatsApp 等)中,通话中的音频路由选项不起作用

我已经阅读了几个关于此的 SO 帖子,但没有成功。

MODE_NORMAL3) 我观察到当 VOIP 呼叫结束时Audiomanager.setMode 被设置为(0) 并且我可以startBlueToothSco()在那里但是没有监听器来监听 AudioManager 模式的变化,我不想轮询它。我还观察到这取决于 VOIP 应用程序试图在通话结束时停止 sco,检查模式可能无法正常工作,因为应用程序可以在模式更改后调用 stopBluetoothSco。

4) 使用 ConnectionService api 进行虚拟调用,使 android 认为它在调用中,但会阻止建立 VOIP 调用,因此 sco 链接不会断开连接。(不可取,因为我需要进行 VOIP 通话)

任何想法/建议将不胜感激。

4

0 回答 0