在蓝牙耳机上接听VoIP电话

问题描述 投票:4回答:1

概观

我目前正在开发支持VoIP呼叫的Android应用程序(使用webrtc)。一切都很完美,但现在我正在尝试增加对蓝牙耳机的支持。如果出现以下情况,我希望自动接听/挂断电话(用户无需触摸设备的屏幕):

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

问题

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

  1. 使用bluetoothAdapter.getProfileProxy(context, serviceListener, BluetoothProfile.HEADSET)获取蓝牙配置文件代理。
  2. 在服务监听器(BluetoothProfile.ServiceListener)上检查获得的BluetoothHeadset是否有连接的蓝牙设备。如果为真,请注册一个BroadcastReceiver,其中包含IntentFilterandroid.intent.action.MEDIA_BUTTONandroid.media.ACTION_SCO_AUDIO_STATE_UPDATEDandroid.bluetooth.headset.profile.action.CONNECTION_STATE_CHANGED,并调用audioManager.startBluetoothSco()

我只收到android.media.ACTION_SCO_AUDIO_STATE_UPDATED行动的广播。我的做法有什么问题?

任何帮助,将不胜感激。

android bluetooth bluetooth-lowenergy android-bluetooth headset
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.