Ответьте на вызов VoIP на Bluetooth-гарнитуре - PullRequest
0 голосов
/ 10 сентября 2018

Обзор

В настоящее время я работаю над приложением для Android, которое поддерживает вызовы VoIP (используя webrtc ). Все работает отлично, но сейчас я пытаюсь добавить поддержку Bluetooth-гарнитур. Я хочу, чтобы на вызовы отвечали / зависали автоматически (без прикосновения пользователя к экрану устройства), если:

  1. У пользователя есть Bluetooth-гарнитура, подключенная к его устройству
  2. Нажата кнопка ответа / отбоя

Задача

Я все еще пытаюсь заставить эту работу. Я прочитал все вопросы о переполнении стека (например, , и , ), но все же не повезло. Что я пробовал:

  1. Получить прокси профиля Bluetooth, используя bluetoothAdapter.getProfileProxy(context, serviceListener, BluetoothProfile.HEADSET).

  2. На служебном приемнике (a BluetoothProfile.ServiceListener) проверьте, есть ли у полученного BluetoothHeadset подключенное устройство Bluetooth. Если true, зарегистрируйте BroadcastReceiver с IntentFilter, который имеет действия android.intent.action.MEDIA_BUTTON, android.media.ACTION_SCO_AUDIO_STATE_UPDATED и android.bluetooth.headset.profile.action.CONNECTION_STATE_CHANGED и вызовите audioManager.startBluetoothSco().

Я получаю трансляции только для действия android.media.ACTION_SCO_AUDIO_STATE_UPDATED. Что не так с моим подходом?

Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 12 сентября 2018

Я не разработал приложения VoIP, поэтому я не уверен в правильной последовательности событий и контрольных вызовов в этом случае. Не уверен, что это может помочь, просто некоторые заметки с точки зрения Bluetooth. Intents BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED (android.bluetooth.headset.profile.action.CONNECTION_STATE_CHANGED) о соединении RFCOMM BluetoothHeadset, оно сохраняется, если профиль Handsfree / Headset включен для определенного устройства Handsfree и используется модуль Handsfree. Эти намерения нужны, чтобы определить, нужно ли следить за состоянием BluetoothHeadset или нет, поэтому вы не будете получать их во время звонков. Вы также можете зарегистрировать получателя для BluetoothHeadset.ACTION_AUDIO_STATE_CHANGED намерений (android.bluetooth.headset.profile.action.AUDIO_STATE_CHANGED). В источнике BluetoothHeadset и, соответственно, в документации Android он описан как «Состояние аудиоподключения профиля A2DP», но это неправильно. Это состояние подключения физического аудио SCO к громкой связи / гарнитуре. Это соединение активно во время голосовых вызовов, распознавания голоса Bluetooth и звонка (если функция внутриполосного звонка поддерживается и включена). Я не помню, как состояние звука BluetoothHeadset касается состояния SCO AudioManager.

...