在Android上,使用BLE,您可以扫描设备并连接/维护与设备的连接吗?

在Android上,使用BLE,您可以扫描设备并连接/维护与设备的连接吗?,android,bluetooth-lowenergy,android-bluetooth,Android,Bluetooth Lowenergy,Android Bluetooth,TL;DR:您可以连接到设备并同时扫描更多设备吗? 我正在开发一个应用程序,可以使用BLE与设备对话。一位刚刚完成BLE项目的同事警告我,不能同时连接到设备和扫描,否则会发生不好的事情。我同意这个假设。因此,目前我在每个屏幕上连接和断开连接 连接时间有时可能需要3秒以上,因此如果我深入应用程序(也可以在应用程序中扫描更多设备),我希望通过不断开连接来加快连接速度。我玩了一点,一切似乎都很好(同时做这两件事) 我在Android文档中读到,你不能同时扫描蓝牙和BLE,但我没有看到任何关于连接BLE

TL;DR:您可以连接到设备并同时扫描更多设备吗?

我正在开发一个应用程序,可以使用BLE与设备对话。一位刚刚完成BLE项目的同事警告我,不能同时连接到设备和扫描,否则会发生不好的事情。我同意这个假设。因此,目前我在每个屏幕上连接和断开连接

连接时间有时可能需要3秒以上,因此如果我深入应用程序(也可以在应用程序中扫描更多设备),我希望通过不断开连接来加快连接速度。我玩了一点,一切似乎都很好(同时做这两件事)

我在Android文档中读到,你不能同时扫描蓝牙和BLE,但我没有看到任何关于连接BLE设备和扫描BLE设备的信息

我的同事描述的一些症状是:

  • 无法关闭系统蓝牙(开关将重新打开)
  • 蓝牙将崩溃(不确定是蓝牙共享还是其他原因)
  • 其他使用蓝牙功能的应用程序会崩溃

您可以同时连接和扫描。。。尽管这些症状确实存在于一些手机/Android版本上。(一些三星设备的个人体验)

蓝牙可以管理多个连接,因此您可以同时扫描和连接

在较旧的API(18-20)中,您可以使用BluetoothAdapter中的StartedScan来搜索BLE设备。根据我的经验,这确实偶尔会导致您描述的问题


但是,如果您使用的是API 21+,那么使用BluetoothLeScanner.startScan是相当轻松的,并且不需要处理计时器来重新启动扫描。你只需给它一个你正在寻找的蓝牙设备的过滤器和一个回调,它就会在发现符合你标准的设备时通知你的应用程序

理论上我相信这应该是可能的,但我已经看到了你的同事报告的所有bug,现在在尝试打开设备之前等待扫描停止。我也只尝试一次在单个设备上有未完成的请求,这有助于提高稳定性,但对快速启动和代码结构非常不利。我只在测试版的基础上发布我的BLE代码,这在谷歌最终添加支持的两年后是愚蠢的。