概述
我目前正在开发一个支持VoIP通话(使用webrtc)的android应用。一切工作正常,但现在我正尝试增加对蓝牙耳机的支持。我希望在以下情况下自动接听/挂断电话(无需用户触摸设备的屏幕):
问题
我仍在努力进行这项工作。我已经阅读了所有相关的堆栈溢出问题(例如this和this),但还是没有运气。 我尝试过的:
使用bluetoothAdapter.getProfileProxy(context, serviceListener, BluetoothProfile.HEADSET)
获取蓝牙配置文件代理。
在服务侦听器(BluetoothProfile.ServiceListener
)上检查获取的BluetoothHeadset
是否具有已连接的蓝牙设备。如果为true,请向具有动作BroadcastReceiver
,IntentFilter
和android.intent.action.MEDIA_BUTTON
的{{1}}注册android.media.ACTION_SCO_AUDIO_STATE_UPDATED
,然后调用android.bluetooth.headset.profile.action.CONNECTION_STATE_CHANGED
。
我只收到audioManager.startBluetoothSco()
动作的广播。我的方法怎么了?
任何帮助将不胜感激。
答案 0 :(得分:0)
我还没有开发VoIP应用程序,因此在这种情况下我不确定事件和控制呼叫的正确顺序。不确定从蓝牙的角度来看这是否有帮助。意图BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED
(android.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状态有关。