我有一个关于 Android 上 BLE 服务发现的小问题。 我的东西运行得很好,但我有一些性能问题..
我看到函数
BluetoothGatt.discoverServices()
首先发现所有服务+特征+描述符,然后再将其发送回给您。但就我而言,它需要两秒多一点的时间,我绝对需要它花费更少的时间。
我的代码基于我在 Android SDK 中找到的示例。
所以我只是想知道是否有什么办法可以做到?我们是否可以覆盖服务发现,以便我们可以只发现服务而不是特征/描述符或其他任何内容:/?或者还有其他方法可以发现服务吗?
老问题,但它需要一些见解。您可以在连接之后、在
discoverServices()
上调用 BluetoothGatt
之前将连接优先级设置为高,从而在一定程度上改进服务发现。尽管不建议这样做,因为它会很快耗尽智能手机的电池。但您可以在调用 onServicesDiscovered()
后切换回平衡优先级。因此在连接时执行此操作。
gatt.requestConnectionPriority(BluetoothGatt.CONNECTION_PRIORITY_HIGH);
然后按
onServicesDiscovered()
,将优先级切换回平衡。
gatt.requestConnectionPriority(BluetoothGatt.CONNECTION_PRIORITY_BALANCED);
这将改善您的服务发现。然而,值得一提的是,您获得的改进程度将取决于智能手机的 BLE 实现。