How to detect if bluetooth device is connected

前端 未结 5 1168
春和景丽
春和景丽 2020-12-28 23:51

In android how can my Activity will get to know if a Bluetooth A2DP device is connected to my device.
Is there any broadcast receiver for that?
How to write this bro

相关标签:
5条回答
  • 2020-12-29 00:26

    Starting from API 11 (Android 3.0) you can use BluetoothAdapter to discover devices connected to a specific bluetooth profile. I used the code below to discover a device by its name:

    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    BluetoothProfile.ServiceListener mProfileListener = new BluetoothProfile.ServiceListener() {
            public void onServiceConnected(int profile, BluetoothProfile proxy) {
                if (profile == BluetoothProfile.A2DP) {
                    boolean deviceConnected = false;
                    BluetoothA2dp btA2dp = (BluetoothA2dp) proxy;
                    List<BluetoothDevice> a2dpConnectedDevices = btA2dp.getConnectedDevices();
                    if (a2dpConnectedDevices.size() != 0) {
                        for (BluetoothDevice device : a2dpConnectedDevices) {
                            if (device.getName().contains("DEVICE_NAME")) {
                                deviceConnected = true;
                            }
                        }
                    }
                    if (!deviceConnected) {
                        Toast.makeText(getActivity(), "DEVICE NOT CONNECTED", Toast.LENGTH_SHORT).show();
                    }
                    mBluetoothAdapter.closeProfileProxy(BluetoothProfile.A2DP, btA2dp);
                }
            }
    
            public void onServiceDisconnected(int profile) {
                // TODO
            }
        };
    mBluetoothAdapter.getProfileProxy(context, mProfileListener, BluetoothProfile.A2DP);
    

    You can do that for every bluetooth profile. Take a look at Working with profiles in Android's guide.

    However, as written in other answers, you can register a BroadcastReceiver to listen to connection events (like when you're working on android < 3.0).

    0 讨论(0)
  • 2020-12-29 00:41

    muslidrikk's answer is broadly correct; however you can alternatively use fetchUUIDsWithSDP() and see what you get back... it's a bit of a hack though -- you'd have to know what UUIDs (capabilities) you could expect from the device, if it were turned on. And that might be difficult to guarantee.

    0 讨论(0)
  • 2020-12-29 00:41

    For BluetoothHeadset specifically, you can call getConnectedDevices() to get connected devices for this specific profile.

    Reference: http://developer.android.com/reference/android/bluetooth/BluetoothHeadset.html

    Other cases you need to register a receiver for that.

    0 讨论(0)
  • 2020-12-29 00:44

    In your activity, define broadcast receiver...

    // Create a BroadcastReceiver for ACTION_FOUND
    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        // When discovery finds a device
        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
            // Get the BluetoothDevice object from the Intent
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            // Add the name and address to an array adapter to show in a ListView
            mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
        }
    }
    

    };

     // Register the BroadcastReceiver
    
    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
    registerReceiver(mReceiver, filter); // Don't forget to unregister during onDestroy
    
    0 讨论(0)
  • 2020-12-29 00:52

    You cannot get the list of connected devices by calling any API. You need instead to listen to the intents ACTION_ACL_CONNECTED, ACTION_ACL_DISCONNECTED that notifies about devices being connected or disconnected. No way to get the initial list of connected devices.

    I had this problem in my app and the way I handle it (didn't find better...) is to bounce off/on the Bluetooth at application start to be sure to start with an empty list of connected devices, and then listen to the above intents.

    0 讨论(0)
提交回复
热议问题