Как программно выбирать между Bluetooth и телефонной трубкой для мультимедийного аудио

Мне нужно иметь набор кнопок, которые работают как выбор выходных данных в JB-дозвоне, который выберет "гарнитуру", "динамик" и "телефонную трубку". Я могу включить и выключить громкоговоритель, однако переключение между тем, что медиавыход идет между стандартным телефоном и гарнитурой Bluetooth, ускользает от меня.

Как я могу построить и вариант, как тот, который находится в дозвонщике, который управляет выходом мультимедиа? Я просмотрел документацию для bluetooth и аудио элементов управления, и ничто, кажется, не работает совершенно правильно (например, setScoBluetooth и т.д.)

1 ответ

Реализация политик маршрутизации зависит от платформы и поэтому может незначительно отличаться между различными продуктами, но это то, что я предлагаю:

Если устройство с поддержкой A2DP сопряжено/подключено "для использования мультимедиа", оно должно быть устройством вывода по умолчанию для потоков MUSIC. Поэтому, если вы ничего не делаете, звук должен быть направлен на устройство A2DP.

Чтобы перенаправить звук на громкоговоритель вместо устройства A2DP, используйте метод AudioManager setBluetoothA2dpOn с аргументом false. Этот метод был отмечен как устаревший в течение длительного времени, но все еще существует и выполняет рекламное действие в последний раз, когда я проверил.

Чтобы перенаправить звук на динамик, используйте тип потока VOICE_CALL и используйте метод AudioManager setMode, чтобы изменить режим на MODE_IN_CALL. Вы также можете отключить bluetooth с помощью setBluetoothScoOn(false).

licensed under cc by-sa 3.0 with attribution.