Android 是否有可能改进BLE服务发现

Android 是否有可能改进BLE服务发现,android,bluetooth,android-service,bluetooth-lowenergy,discovery,Android,Bluetooth,Android Service,Bluetooth Lowenergy,Discovery,关于Android上的BLE服务发现,我有一个小问题。 我有一些工作非常好的东西,但我有一个小问题 我看到函数BluetoothGatt.discoverServices()首先发现所有服务+特征+描述符,然后再将其发送回您。但在我的情况下,这需要两秒钟多一点,我绝对需要花更少的时间。 我的代码基于在Android SDK中找到的示例 所以我只是想知道有没有办法?我们是否可以覆盖服务发现,以便只发现服务而不发现特征/描述符或其他任何内容:/?还是有其他方法可以发现服务?这是一个老问题,但它需要一

关于Android上的BLE服务发现,我有一个小问题。 我有一些工作非常好的东西,但我有一个小问题

我看到函数
BluetoothGatt.discoverServices()
首先发现所有服务+特征+描述符,然后再将其发送回您。但在我的情况下,这需要两秒钟多一点,我绝对需要花更少的时间。 我的代码基于在Android SDK中找到的示例


所以我只是想知道有没有办法?我们是否可以覆盖服务发现,以便只发现服务而不发现特征/描述符或其他任何内容:/?还是有其他方法可以发现服务?

这是一个老问题,但它需要一些见解。通过在连接后和调用
BluetoothGatt
上的
discoverServices()
之前将连接优先级设置为高,您可以在一定程度上改进服务发现。虽然这是不推荐的,因为它消耗智能手机电池很快。但在调用
onServicesDiscovered()
后,您可以切换回平衡优先级。所以,在连接上这样做

gatt.requestConnectionPriority(BluetoothGatt.CONNECTION_PRIORITY_HIGH);
onServicesDiscovered()
上执行此操作,以将优先级切换回平衡

gatt.requestConnectionPriority(BluetoothGatt.CONNECTION_PRIORITY_BALANCED);

这将改进您的服务发现。然而,值得一提的是,这将取决于智能手机的可扩展性,取决于您获得的改进程度

iOS也能发现一切。我认为你在Android端调整服务发现的机会很小。2秒有点长。在我的应用程序中发现20个元素最多需要半秒钟。你的设备能提供多少功能?您的Ble服务是否表现不佳?您可以尝试在另一个线程中发现服务。你的设备是什么?例如,在装有android 4.3的三星Galaxy S3上,为了不阻塞Ble堆栈,您必须在onLeScan中使用新线程。为什么需要更快的发现?您能否在较早的时间发现服务,并在稍后的时间实际使用该设备?@OneWorld:首先感谢您的时间和回答。我在三星Galaxy S4上使用安卓4.3。我将快速向您介绍我在我的应用程序中所经历的过程:-我启动BLE设备扫描,并将找到的设备放在ListView中(这部分很好)-然后我在列表中选择一个设备:停止扫描,连接到设备,启动服务发现,对特征执行一些操作,然后这个装置断开了我的连接。因此,我以前无法执行服务发现,因为我不知道用户将选择哪个设备:/@OneWorld:我需要在2秒内完成,因为我要连接的设备有2秒的超时,因此如果我没有在2秒内完成发现,它将断开我的连接。@Emil ah Right。你有文档的链接吗?我想读一读。Android的BLE堆栈的内部没有公开的文档。但是你可以看到提交,它(我猜)在。搜索执行conn参数更新的“L2CA_EnableUpdateBleConnParms(p_clcb->p_srcb->server_bda,FALSE);”。