Detectar cambios de estado realizados en el BluetoothAdapter?
Tengo una aplicación con un botón que uso para activar y desactivar BT. Tengo el siguiente código ahí;
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();
}
}
Estoy llamando a button Flip, que cambia el estado BT, y luego llama a ButtonText, que debería actualizar la interfaz de usuario. Sin embargo, el problema que tengo es que BT tarda unos segundos en encenderse, y durante estos segundos, el estado de BT no está habilitado, lo que hace que mi botón diga Bluetooth apagado, incluso si estará encendido en 2 segundos.
Encontré la STATE_CONNECTING
constante en el BluetoothAdapter documentación de Android, pero... Simplemente no sé cómo usarlo, siendo un novato y todo.
Entonces, tengo dos preguntas:
- ¿Hay una manera de vincular dinámicamente un elemento de la interfaz de usuario (como un botón o una imagen) a un estado BT, de modo que cuando el estado BT cambie, el botón también cambiará?
- De lo contrario, me gustaría presionar el botón y obtener el estado correcto (me gustaría que dijera BT on, incluso si solo está conectando, ya que estará encendido en 2 segundo). ¿Cómo hago esto?
1 answers
Usted querrá registrar un BroadcastReceiver
para escuchar cualquier cambio en el estado del BluetoothAdapter
:
Como una variable de instancia privada en su Activity
(o en un archivo de clase separado... el que prefieras):
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;
}
}
}
};
Tenga en cuenta que esto asume que su Activity
implementa un método setButtonText(String text)
que cambiará el texto de Button
en consecuencia.
Y luego en su Activity
, registre y anule el BroadcastReceiver
de la siguiente manera,
@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);
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-03 15:03:29