【发布时间】:2016-05-25 09:11:34
【问题描述】:
我正在开发一个连接到 BLE 设备并读取 Gatt 服务和 Gatt 特性的 Android 应用程序。我使用了 Android Development Site 中的 BluetoothLeGatt 示例项目作为参考。
到目前为止,我能够以编程方式连接到设备(我记下了我的设备地址以便能够执行此操作)并通过记下过滤掉我想要读取的特定 Gatt 服务以及该服务的特定特征服务和特征的 UUID。每当有消息从我的 BLE 设备发送到我的 Android 应用程序时,Google 提供的示例也会更新。总的来说,我在这方面没有问题。
但是,在进一步阅读 GATT 后,我发现可以使用单个 Android 应用程序(作为主设备或客户端 - 作为接收所述数据的人)。所以我试图做的是拥有 2 个 BLE 设备(不同的地址),记下它们的地址,然后一旦应用程序看到这 2 个地址已启动并正在运行,我的应用程序就会尝试连接到它们。
在代码中,当我看到我的 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 设备?我不确定如何继续。
【问题讨论】:
-
是的,你可以,我已经用一个简单的循环完成了。我所做的是,首先我扫描设备,一旦找到它们,我就把它放在一个数组列表中并调用这个连接方法。要成功建立连接,您还需要一个锁定和等待机制,因为您想在第一个连接之后尝试建立第二个连接。
-
@Gautam 你介意发布你的代码吗?我将不胜感激有关此主题的任何线索。
标签: android gatt bluetooth-lowenergy