以编程方式连接到配对的蓝牙设备

rmc*_*c47 52 android bluetooth

有没有办法使用Android SDK以编程方式连接到已配对的蓝牙设备?

换句话说:我可以进入设置 - >无线和网络 - >蓝牙设置,然后点击设备(列为"已配对但未连接"),此时它将连接.我希望能够以编程方式执行此操作,但是没有办法实现此目的.

我看到了创建RFCOMM套接字的选项,对于SPP设备,我假设它也会做连接部分,但是对于A2DP设备,实际数据传输将由OS处理,而不是由我的应用程序,我认为这不适用?

kco*_*ock 48

好吧,因为这让我发疯,我做了一些挖掘源代码,我发现100%可靠(至少在我的Nexus 4,Android 4.3)解决方案连接到配对的A2DP设备(如耳机)或蓝牙音频设备).我已经发布了一个完整的示例项目(可以使用Android Studio轻松构建),您可以在Github上找到.

基本上,您需要做的是:

  • 获取一个实例 BluetoothAdapter
  • 使用此实例,获取A2DP的配置文件代理:

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

在哪里listener是一个ServiceListenerBluetoothProfile在其onServiceConnected()回调中接收a (可以强制转换为BluetoothA2dp实例)

  • 使用反射获取connect(BluetoothDevice)代理上的方法:

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

  • 找到你的BluetoothDevice:

String deviceName = "My_Device_Name";

BluetoothDevice result = null;

Set<BluetoothDevice> devices = adapter.getBondedDevices();
if (devices != null) {
    for (BluetoothDevice device : devices) {
        if (deviceName.equals(device.getName())) {
            result = device;
            break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
  • 并调用connect()方法:

connect.invoke(proxy, result);

至少对我而言,这导致设备立即连接.

  • @KevinCoppock,你太棒了!刚才你节省了我的时间!谢谢你! (3认同)

Mar*_*ein 1

我使用此处的代码作为应用程序中此功能的起点:http ://developer.android.com/guide/topics/wireless/bluetooth.html#ConnectingDevices

设备配对后,应用程序就可以通过编程方式将两个设备连接在一起。