Programmatically connect to paired Bluetooth device

前端 未结 4 578
眼角桃花
眼角桃花 2020-11-27 11:14

Is there a way, using the Android SDK, to programmatically connect to an already-paired Bluetooth device?

In other words: I can go into Settings -> Wireless & ne

4条回答
  •  心在旅途
    2020-11-27 11:42

    Okay, since this was driving me crazy, I did some digging into the source code and I've found a 100% reliable (at least on my Nexus 4, Android 4.3) solution to connect to a paired A2DP device (such as a headset or Bluetooth audio device). I've published a fully working sample project (easily built with Android Studio) that you can find here on Github.

    Essentially, what you need to do is:

    • Get an instance of the BluetoothAdapter
    • Using this instance, get a profile proxy for A2DP:

    adapter.getProfileProxy (context, listener, BluetoothProfile.A2DP);

    where listener is a ServiceListener that will receive a BluetoothProfile in its onServiceConnected() callback (which can be cast to a BluetoothA2dp instance)

    • Use reflection to acquire the connect(BluetoothDevice) method on the proxy:

    Method connect = BluetoothA2dp.class.getDeclaredMethod("connect", BluetoothDevice.class);

    • Find your BluetoothDevice:

    String deviceName = "My_Device_Name";
    
    BluetoothDevice result = null;
    
    Set devices = adapter.getBondedDevices();
    if (devices != null) {
        for (BluetoothDevice device : devices) {
            if (deviceName.equals(device.getName())) {
                result = device;
                break;
            }
        }
    }
    

    • And invoke the connect() method:

    connect.invoke(proxy, result);

    Which, at least for me, caused an immediate connection of the device.

提交回复
热议问题