Попытка обнаружить изменение подключения устройств Bluetooth в Android - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь обнаружить изменения подключения устройства BT в моем приложении для автоматического запуска / приостановки воспроизведения. Это работает нормально, за исключением того, что событие подключения принимается с задержкой от 20 до 30 с. Отключение имеет небольшую задержку от 2 до 3 с, но поскольку я также слушаю ACTION_AUDIO_BECOMING_NOISY, я могу сделать паузу сразу после отключения гарнитуры ... Есть идеи, что вызывает эту задержку?

Регистрация приемника:

final IntentFilter intentFilter = new IntentFilter(AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED);
intentFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
this.service.registerReceiver(this.mediaBluetoothReceiver, intentFilter);

Приемник

public class MediaBluetoothReceiver extends BroadcastReceiver {

    private final static int STATE_DISCONNECTED = 0;
    private final static int STATE_CONNECTED = 2;
    private final static int STATE_CONNECTING = 1;
    private final static int STATE_DISCONNECTING = 3;

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent != null) {
            final String intentAction = intent.getAction();
            if (intentAction != null) {
                try {
                    if (intentAction.equals(BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED)) {
                        String msg = "Bluetooth A2DP connection changed...";

                        final int state = intent.getIntExtra(BluetoothA2dp.EXTRA_STATE, -1);
                        final int prevState = intent.getIntExtra(BluetoothA2dp.EXTRA_PREVIOUS_STATE, -1);
                        final BluetoothDevice device = (BluetoothDevice) intent.getExtras().get("android.bluetooth.device.extra.DEVICE");

                        // 0: disconnected
                        // 1: connecting
                        // 2: connected
                        // -1: disconnecting
                        msg += " state: " + state + ", prevState: " + prevState;
                        LogHelper.d(TAG, msg);

                        if (state == BluetoothA2dp.STATE_DISCONNECTED) {
                            onDeviceDisconnected(device, 0);
                        } else if (state == BluetoothA2dp.STATE_CONNECTED) {
                            onDeviceConnected(device);
                        }

                    }
                } catch (final Throwable t) {
                    ExceptionHelper.fullLogging(t, TAG);
                }
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...