I have an app with a button on it that I use to turn BT on and off. I have the following code in there;
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();     } } I'm calling button Flip, which flips the BT state, and then calls ButtonText, which should update the UI. However, the issue I'm having is, it takes a few seconds for BT to turn on - and during these seconds, the BT status is not enabled, making my button say Bluetooth off, even if it will be on in 2 seconds.
I found the STATE_CONNECTING constant in the BluetoothAdapter android documentation, but... I simply don't know how to use it, being a newbie and all.
So, I've got two questions:
You will want to register a BroadcastReceiver to listen for any changes in the state of the BluetoothAdapter:
As a private instance variable in your Activity (or in a separate class file... whichever one you prefer):
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;             }         }     } }; Note that this assumes that your Activity implements a method setButtonText(String text) that will change the Button's text accordingly.
And then in your Activity, register and unregister the BroadcastReceiver as follows,
@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); } If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With