gpt4 book ai didi

android - 在蓝牙耳机上接听 VoIP 电话

转载 作者:太空宇宙 更新时间:2023-11-03 10:58:13 30 4
gpt4 key购买 nike

概览

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

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

问题

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

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

  2. 在服务监听器(BluetoothProfile.ServiceListener)上检查获取的BluetoothHeadset 是否连接了蓝牙设备。如果为 true,则使用具有操作 android.intent.action.MEDIA_BUTTONandroid.media.ACTION_SCO_AUDIO_STATE_UPDATED 的 IntentFilter 注册一个 BroadcastReceiver android.bluetooth.headset.profile.action.CONNECTION_STATE_CHANGED 并调用 audioManager.startBluetoothSco()

我只收到 android.media.ACTION_SCO_AUDIO_STATE_UPDATED 操作的广播。我的方法有什么问题?

如有任何帮助,我们将不胜感激。

最佳答案

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

关于android - 在蓝牙耳机上接听 VoIP 电话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52254882/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com