【问题标题】:Answer VoIP call on bluetooth headset在蓝牙耳机上接听 VoIP 电话
【发布时间】:2018-09-12 20:01:57
【问题描述】:

概述

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

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

问题

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

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

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

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

任何帮助将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    我还没有开发过 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 状态有何关系。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-30
      相关资源
      最近更新 更多