Обнаружение изменений состояния, внесенных в BluetoothAdapter?
у меня есть приложение с кнопкой на нем, что я использую, чтобы включить и выключить BT. У меня есть следующий код там;
public void buttonFlip(View view) {
flipBT();
buttonText(view);
}
public void buttonText(View view) {
Button buttonText = (Button) findViewById(R.id.button1);
if (mBluetoothAdapter.isEnabled() || (mBluetoothAdapter.a)) {
buttonText.setText(R.string.bluetooth_on);
} else {
buttonText.setText(R.string.bluetooth_off);
}
}
private void flipBT() {
if (mBluetoothAdapter.isEnabled()) {
mBluetoothAdapter.disable();
} else {
mBluetoothAdapter.enable();
}
}
Я вызываю кнопку Flip, которая переворачивает состояние BT, а затем вызывает ButtonText, который должен обновить пользовательский интерфейс. Однако проблема, с которой я сталкиваюсь, заключается в том, что для включения BT требуется несколько секунд - и в течение этих секунд статус BT не включен, что делает мою кнопку отключенной Bluetooth, даже если она будет включена через 2 секунды.
нашел STATE_CONNECTING
константа в документации BluetoothAdapter android, но... Я просто не знаю, как его использовать, будучи новичком и все.
Так, у меня есть два вопроса:
- есть ли способ динамически привязать элемент пользовательского интерфейса (например, кнопку или изображение) к состоянию BT, чтобы при изменении состояния BT кнопка также изменялась?
- в противном случае я хотел бы нажать кнопку и получить правильное состояние (я хотел бы, чтобы он сказал BT on, даже если это только подключение, так как он будет на 2 секунды). Как мне это сделать?
1 ответ:
вы хотите зарегистрировать
BroadcastReceiver
для прослушивания любых изменений в состоянииBluetoothAdapter
:как частный экземпляр переменной в вашем
Activity
(или в отдельном файле класса... какой вы предпочитаете):private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) { final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR); switch (state) { case BluetoothAdapter.STATE_OFF: setButtonText("Bluetooth off"); break; case BluetoothAdapter.STATE_TURNING_OFF: setButtonText("Turning Bluetooth off..."); break; case BluetoothAdapter.STATE_ON: setButtonText("Bluetooth on"); break; case BluetoothAdapter.STATE_TURNING_ON: setButtonText("Turning Bluetooth on..."); break; } } } };
обратите внимание, что это предполагает, что ваш
Activity
реализует методsetButtonText(String text)
это изменитButton
текст соответственно.и затем в
Activity
, регистрация и отмена регистрацииBroadcastReceiver
следующим образом:@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* ... */ // Register for broadcasts on BluetoothAdapter state change IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED); registerReceiver(mReceiver, filter); } @Override public void onDestroy() { super.onDestroy(); /* ... */ // Unregister broadcast listeners unregisterReceiver(mReceiver); }