我想连接多个 ble 设备并并行进行读写操作?
4 回答
我们在 Android 上使用 BLE 的经验清楚地表明,Android BLE 堆栈上的多线程操作可能会导致许多问题.. ;)
我建议你一次做一件事,并尽量避免并行工作......
我们的 2 美分...
为了能够同时连接到多个设备,您必须使用自动连接 gatt 功能,而不是直接连接(http://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#connectGatt( android.content.Context,%20boolean,%20android.bluetooth.BluetoothGattCallback))。
如果使用自动连接,手机可以同时发起多个连接。如果使用直接连接,则只能同时发起一个连接。
但是,一旦连接上,您就可以并行执行所有 gatt 操作,尽管每个外围设备一次只能有一个未完成的 gatt 操作。
有几个库可以让您轻松地做到这一点。
例如,RXAndroidBLE 是一项很棒的工作。但是如果你使用 Kotlin - 有一些更简单的东西: BleGattCoroutines。
基本上,它使用 Kotlin 的协程将异步(和丑陋的)Android BLE API 包装到普通同步风格的调用中。
免责声明:我不使用这个库本身,但在我最近的商业嵌入式项目中使用相同的方法。它就像一个魅力。