在蓝牙耳机上接听VoIP呼叫

时间:2018-09-10 09:34:49

标签: android bluetooth bluetooth-lowenergy android-bluetooth headset

概述

我目前正在开发一个支持VoIP通话(使用webrtc)的android应用。一切工作正常,但现在我正尝试增加对蓝牙耳机的支持。我希望在以下情况下自动接听/挂断电话(无需用户触摸设备的屏幕):

  1. 用户将蓝牙耳机连接到他的设备
  2. 按下了接听/挂断按钮

问题

我仍在努力进行这项工作。我已经阅读了所有相关的堆栈溢出问题(例如thisthis),但还是没有运气。 我尝试过的:

  1. 使用bluetoothAdapter.getProfileProxy(context, serviceListener, BluetoothProfile.HEADSET)获取蓝牙配置文件代理。

  2. 在服务侦听器(BluetoothProfile.ServiceListener)上检查获取的BluetoothHeadset是否具有已连接的蓝牙设备。如果为true,请向具有动作BroadcastReceiverIntentFilterandroid.intent.action.MEDIA_BUTTON的{​​{1}}注册android.media.ACTION_SCO_AUDIO_STATE_UPDATED,然后调用android.bluetooth.headset.profile.action.CONNECTION_STATE_CHANGED

我只收到audioManager.startBluetoothSco()动作的广播。我的方法怎么了?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我还没有开发VoIP应用程序,因此在这种情况下我不确定事件和控制呼叫的正确顺序。不确定从蓝牙的角度来看这是否有帮助。意图BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGEDandroid.bluetooth.headset.profile.action.CONNECTION_STATE_CHANGED)与BluetoothHeadset的RFCOMM连接有关,如果为特定的免提装置启用了免提/耳机配置文件,并且正在使用免提装置,则该连接将保持活动状态。您需要这些意图来检测是否需要照顾BluetoothHeadset状态,以便在通话期间不会收到它们。 您也可以为BluetoothHeadset.ACTION_AUDIO_STATE_CHANGED意向(android.bluetooth.headset.profile.action.AUDIO_STATE_CHANGED)注册接收者。在BluetoothHeadset源以及相应的Android文档中,它描述为“ A2DP配置文件的音频连接状态”,但这是错误的。这是免提/耳机物理音频SCO连接的状态。在语音呼叫,蓝牙语音识别和响铃(如果支持并启用“带内响铃”功能)期间,此连接处于活动状态。我不记得BluetoothHeadset音频状态如何与AudioManager的SCO状态有关。