我正在开发一个连接到BLE设备并读取Gatt服务和Gatt特征的Android应用程序。我使用了Android开发网站上的BluetoothLeGatt样例项目作为参考。
到目前为止,我能够以编程方式连接到设备(我记下了设备的地址以便这样做),并通过记下服务和特征的UUID来过滤出我想要读取的特定Gatt服务和该服务的特定特征。谷歌提供的示例还会在我的BLE设备向我的Android应用程序发送消息时进行更新。总体而言,我在这方面没有任何问题。
但是,在进一步了解GATT之后,我发现可以通过单个Android应用程序连接到多个BLE设备(所有从设备或服务器-发送数据的设备),并作为主设备或客户端(接收所述数据)使用。因此,我尝试拥有2个BLE设备(不同的地址),记录它们的地址,然后当应用程序看到这两个地址正在运行时,尝试连接到它们。
在代码中,当我看到我的2个BLE设备时,我调用此函数:
到目前为止,我能够以编程方式连接到设备(我记下了设备的地址以便这样做),并通过记下服务和特征的UUID来过滤出我想要读取的特定Gatt服务和该服务的特定特征。谷歌提供的示例还会在我的BLE设备向我的Android应用程序发送消息时进行更新。总体而言,我在这方面没有任何问题。
但是,在进一步了解GATT之后,我发现可以通过单个Android应用程序连接到多个BLE设备(所有从设备或服务器-发送数据的设备),并作为主设备或客户端(接收所述数据)使用。因此,我尝试拥有2个BLE设备(不同的地址),记录它们的地址,然后当应用程序看到这两个地址正在运行时,尝试连接到它们。
在代码中,当我看到我的2个BLE设备时,我调用此函数:
private void connectToDevice(){
mDeviceName = deviceList.get(currentIndex).getName();
mDeviceAddress = deviceList.get(currentIndex).getAddress();
Log.e(TAG, "connecting to device name = " + mDeviceName);
mBluetoothLeService.connect(mDeviceAddress);
}
currentIndex
最初设置为零。当我成功连接后,我执行以下操作:
private final BroadcastReceiver mGattUpdateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (BluetoothLeService.ACTION_GATT_CONNECTED.equals(action)) {
Log.e(TAG, "connected");
mConnected = true;
if(currentIndex < deviceList.size()-1) currentIndex ++;
connectToDevice();
}
}
};
我要检查一下是否还有设备可以连接到我的deviceList
,如果有,就增加我的计数器并连接,直到我用完列表中的所有设备。
然而,使用这种方法似乎没有任何成功。
请注意,在我的设备之间切换连接(轮询)不是一个选项。当我有很多设备并且重要的是及时获取它们的消息而没有延迟时,这将成为一个问题。因此,我必须与我的设备保持实时连接。
有人尝试在Android上连接多个BLE设备吗?我不确定如何继续。