Я пытаюсь обнаружить изменения подключения устройства 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);
}
}
}
}