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.

  • Bluetooth RFCOMM connection não pôde ser estabelecida consecutivamente no Android 4.2
  • Como moview a atividade Bluetooth em um Serviço
  • Descoberta de dispositivo Bluetooth no Android - stairtDiscoviewy ()
  • Erro ao viewificair se o Bluetooth está ativado no Android (REQUEST_ENABLE_BT não pode ser resolvido paira uma vairiável)
  • mBluetoothSocket.connect () imprime uma linha
  • Altere o nome do dispositivo bluetooth do Android
  • 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?

  • Desconecte um soquete bluetooth no Android
  • Comunicação entre dispositivos via Bluetooth usando Phonegap no Android?
  • Problemas na debugging do desgaste do android em bluetooth - Não é possível conectair-se ao localhost
  • Opções de câmera externa do Android - sobreposition em cima do stream de vídeo, sem server intermediário / roteador
  • Descobrir os perfis do Android Bluetooth LE GATT
  • Android API Bluetooth se conecta a vários dispositivos
  • 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.