Ответить на вызов voip на гарнитуре bluetooth

Обзор

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

  1. К устройству пользователя подключена bluetooth-гарнитура.
  2. Нажата кнопка Ответ / Завершение

Проблема

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

  1. Получите прокси-сервер профиля Bluetooth с помощью bluetoothAdapter.getProfileProxy(context, serviceListener, BluetoothProfile.HEADSET).

  2. На служебном прослушивателе (BluetoothProfile.ServiceListener) проверьте, есть ли у полученного BluetoothHeadset подключенное устройство Bluetooth. Если это правда, зарегистрируйте 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. Что не так с моим подходом?

Любая помощь будет оценена по достоинству.

4
0
639
1

Ответы 1

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

Другие вопросы по теме