Установить активное устройство A2DP в Android

Я работал над кодом для отправки коротких звуковых сообщений недорогим Bluetooth-наушникам.

Я хочу иметь возможность выбрать текущее устройство вывода звука с A2DP, и, похоже, нет надежного способа сделать это.

Я знаю, как получить профиль A2DP и ​​использовать отражение для подключения и отключения устройств.

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
public BluetoothA2dp mA2DP;

mBluetoothAdapter.getProfileProxy(this, mProfileListener, BluetoothProfile.A2DP);

private BluetoothProfile.ServiceListener mProfileListener = new BluetoothProfile.ServiceListener() {
        public void onServiceConnected(int profile, BluetoothProfile proxy) {
            if (profile == BluetoothProfile.A2DP) {
                mA2DP = (BluetoothA2dp) proxy;
            }
        }

        @Override
        public void onServiceDisconnected(int profile) {
            if (profile==BluetoothProfile.A2DP) {
                mA2DP = null;
            }
        }
    };

А с профилем A2DP вы можете использовать отражение для доступа к методам подключения и отключения:

public void disconnectA2DP(BluetoothDevice bd) {
    if (mA2DP==null) return;
    try {
        Method m = BluetoothA2dp.class.getDeclaredMethod("disconnect", BluetoothDevice.class); 
        m.invoke(mA2DP,bd);
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    }
}

(Connect - то же самое, кроме использования "connect" для имени метода)

Все это прекрасно работает. Затем вы можете использовать GetConnectedDevices, чтобы узнать, какие устройства в данный момент подключены.

Старые телефоны поддерживают только одно устройство, поэтому этот механизм отлично работает для переключения выходов. Тем не менее, более поздние телефоны (в частности, Samsung), кажется, поддерживают одновременно ДВА устройства. Похоже, нет никакого способа выбрать устройство, на которое будет идти звук. Я могу отключить тот, который мне НЕ нужен, но некоторые устройства имеют раздражающую привычку повторного подключения без запроса и создания активного выхода.

В исходном коде для BluetoothA2dp вы можете ясно видеть "setActiveDevice", но он, кажется, не доступен для приложений, даже через отражение.

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

Редактировать: Частичное нечеткое решение: Опытным путем, последнее устройство BluetoothDevice в списке устройств является активным. Если это не тот, который я хочу, я отключаю ПЕРВЫЙ в списке, и подключаю тот, который мне НУЖЕН. Кажется, это работает, но не кажется мне лучшим решением.

0 ответов

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