如何对所有连接的设备同时执行BluetoothGatt读写请求?

时间:2016-04-20 12:22:01

标签: android bluetooth-lowenergy gatt android-ble

我想连接多个ble设备并且并行执行读写操作?

4 个答案:

答案 0 :(得分:1)

我们在Android上使用BLE的经验清楚地表明Android BLE堆栈上的多线程操作可能会导致很多问题..;)

我建议你一次做一件事,尽量避免并行工作......

我们的2美分......

答案 1 :(得分:1)

为了能够同时连接多个设备,您必须使用自动连接gatt功能,而不是直接连接(http://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#connectGatt(android.content.Context,%20boolean,%20android.bluetooth.BluetoothGattCallback))。

如果使用自动连接,手机可以同时启动多个连接。如果使用直接连接,则只能同时启动一个连接。

然而,一旦连接,您可以并行执行所有gatt操作,尽管每个外设一次只能有一个未完成的gatt操作。

答案 2 :(得分:1)

有多个库,这些库使您可以轻松进行此操作。

例如,RXAndroidBLE是一项出色的工作。但是,如果您使用的是Kotlin,那就更容易了:BleGattCoroutines

基本上,它使用Kotlin的协程将异步(且难看)的Android BLE API包装到普通的同步样式调用中。

免责声明:我不使用此库本身,而是在我最近的商业嵌入式项目中使用相同的方法。它就像一种魅力。

答案 3 :(得分:0)

This is one我发现在Android中使用BLE堆栈的更好的回购。但它并没有给出并行处理操作。我认为如果你在SDK级别工作,实际上没有办法进行并行操作,因为你没有任何低级控制。

有一个新的RXAndroidBLE库,我没有使用它,但它可能会有所帮助。有一些讨论about it here。他们显然能够同时连接5个传感器并处理数据......虽然它仍然是顺序的。