How to detect Bluetooth state change using a broadcast receiver?

前端 未结 3 1529
逝去的感伤
逝去的感伤 2020-12-02 18:59

I am trying to make an app that shows a toast when the device\'s Bluetooth turned on. I wanna do that even when my app is not running. So I should use a broadcast receiver,

相关标签:
3条回答
  • 2020-12-02 19:10

    AS far as permissions go, to detect the state change of bluetooth you need to add this to your AndroidManifest.xml.

    <uses-permission android:name="android.permission.BLUETOOTH" />
    

    An example receiver would look like this, you add this code to where you want to handle the broadcast, for example an activity:

        private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
                public void onReceive (Context context, Intent intent) {
                    String action = intent.getAction();
    
                    if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) {
                        if(intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1) 
        == BluetoothAdapter.STATE_OFF)
        // Bluetooth is disconnected, do handling here
    }
    
    }
    
            };
    

    To use the receiver, you need to register it. Which you can do as follows. I register the receiver in my main activity.

    registerReceiver(this, new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED));
    

    You could also decide to add all of it to your AndroidManifest.xml. This way you can make a special class for the receiver and handle it there. No need to register the receiver, just make the class and add the below code to the AndroidManifest

    <receiver
            android:name=".packagename.NameOfBroadcastReceiverClass"
            android:enabled="true">
        <intent-filter>
            <action android:name="android.bluetooth.adapter.action.STATE_CHANGED"/>
        </intent-filter>
    </receiver>
    
    0 讨论(0)
  • 2020-12-02 19:15

    Unfortunately, for apps targeting api 26 or higher, manifest declared broadcast receivers don't work anymore (reference here: https://developer.android.com/guide/components/broadcast-exceptions), with some exceptions. android.bluetooth.adapter.action.STATE_CHANGED is not in that list.

    For bluetooth, you can only listen for changes on:

    ACTION_CONNECTION_STATE_CHANGED, ACTION_ACL_CONNECTED, ACTION_ACL_DISCONNECTED

    0 讨论(0)
  • 2020-12-02 19:24

    You have to take following permission.

    <uses-permission android:name="android.permission.BLUETOOTH" />
    

    and you have to write this as your intent filter in receiver tag.

    <action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
    
    0 讨论(0)
提交回复
热议问题