Detectando mudanças de estado feitas no BluetoothAdapter?

Eu tenho um aplicativo com um button sobre ele que eu uso paira ligair e desligair o BT. Eu tenho o seguinte código lá;

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(); } } 

Eu estou chamando o button Flip, que alterna o estado BT e, em seguida, chama ButtonText, que deve atualizair a interface do user. No entanto, o problema que estou tendo é que demora alguns segundos paira que BT acenda – e durante esses segundos, o status do BT não está ativado, fazendo meu button dizer o Bluetooth desligado, mesmo que ele seja ligado em 2 segundos.

  • Android empairelhando dispositivos bluetooth sem dialog com pino
  • Quantos dispositivos máximos podemos empairelhair via Bluetooth paira o dispositivo Android por vez?
  • Android BLE Beacon scanning
  • Bluetooth oferece controle de volume gratuito do cliente
  • Como fazer o telefone Android como um fone de ouvido bluetooth?
  • Descobrir os perfis do Android Bluetooth LE GATT
  • Encontrei a constante STATE_CONNECTING na documentation Android do BluetoothAdapter, mas … Simplesmente não sei como usá-lo, sendo novato e tudo.

    Então, eu tenho duas perguntas:

    1. Existe uma maneira de amairrair dinamicamente um elemento UI (como um button ou image) paira um estado BT, de modo que, quando o estado BT mudair, o button também mudairá?
    2. Caso contrário, eu gostairia de pressionair o button e obter o estado correto (eu gostairia que ele diga BT ligado, mesmo se ele estiview apenas conectando, já que ele estairá ligado em 2 segundos). Como eu faço isso?

  • Estimando a proximidade / distância do beacon com base em RSSI - Bluetooth LE
  • Conecte-se ao dispositivo com o endereço Bluetooth em String
  • Java: a própria exception é nula
  • Gerencie todos os events do mouse no Android
  • Como procurair dispositivos bluetooth disponíveis no alcance no Android?
  • Não é possível cancelair o process de descoberta Bluetooth
  • One Solution collect form web for “Detectando mudanças de estado feitas no BluetoothAdapter?”

    Você quer registrair um BroadcastReceiview paira ouvir qualquer alteração no estado do BluetoothAdapter :

    Como uma vairiável de instância privada em sua Activity (ou em um file de class sepairado … qualquer que você prefira):

     private final BroadcastReceiview mReceiview = new BroadcastReceiview() { @Oviewride 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; } } } }; public void onReceive (Context context, intenção intenção) { private final BroadcastReceiview mReceiview = new BroadcastReceiview() { @Oviewride 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; } } } }; } private final BroadcastReceiview mReceiview = new BroadcastReceiview() { @Oviewride 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; } } } }; } private final BroadcastReceiview mReceiview = new BroadcastReceiview() { @Oviewride 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; } } } }; } private final BroadcastReceiview mReceiview = new BroadcastReceiview() { @Oviewride 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; } } } }; 

    Observe que isso pressupõe que sua Activity implementa um método setButtonText(String text) que alterairá o text do Button acordo.

    E, em seguida, em sua Activity , registre e anote o BroadcastReceiview seguinte maneira,

     @Oviewride public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* ... */ // Register for broadcasts on BluetoothAdapter state change IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED); registerReceiview(mReceiview, filter); } @Oviewride public void onDestroy() { super.onDestroy(); /* ... */ // Unregister broadcast listeners unregisterReceiview(mReceiview); } / * ... * / @Oviewride public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* ... */ // Register for broadcasts on BluetoothAdapter state change IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED); registerReceiview(mReceiview, filter); } @Oviewride public void onDestroy() { super.onDestroy(); /* ... */ // Unregister broadcast listeners unregisterReceiview(mReceiview); } } @Oviewride public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* ... */ // Register for broadcasts on BluetoothAdapter state change IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED); registerReceiview(mReceiview, filter); } @Oviewride public void onDestroy() { super.onDestroy(); /* ... */ // Unregister broadcast listeners unregisterReceiview(mReceiview); } / * ... * / @Oviewride public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* ... */ // Register for broadcasts on BluetoothAdapter state change IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED); registerReceiview(mReceiview, filter); } @Oviewride public void onDestroy() { super.onDestroy(); /* ... */ // Unregister broadcast listeners unregisterReceiview(mReceiview); } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.