如何解决iOS:nRF Connect应用程序能够找到设备时,scanForPeripheralsWithServices找不到设备
我有一个Java 15 can be installed via Marketplace在Raspberry Pi上运行的BLE外围设备。
同时,我有一个iOS应用程序作为BLE中心,它使用nil进行scanForPeripheralsWithServices,以检测周围的所有设备。
我能够检测到一些设备,但无法检测到在Raspberry Pi上运行的设备。
但是,在iOS上使用nRF Connect应用程序进行扫描时,可以看到它。
那怎么可能? (我假设nRF Connect也正在使用Core Bluetooth ...)
解决方法
您可能正在执行某些操作(例如使用nRF Connect应用程序)以连接到设备,从而导致该设备停止投放广告。大多数BLE平台在连接时都会停止投放广告。
使用retrieveConnectedPeripherals(withServices:)
检测已连接的设备。您必须提供服务列表;无法检测到当前已连接的所有设备。
由于这是在Pi上,因此您还可以在那一侧验证系统当前是否正在实际发布广告,以及它是否具有任何连接。核心蓝牙会进行大量的缓存,这可能导致实际发生的事情似乎从缓存中消失。我最近还没有钻研nRF应用程序来验证它在多大程度上依赖缓存。我建议同时使用LightBlue进行测试,并同时使用多个设备进行测试(我通常在iOS,Android和Mac上使用多个应用程序,有时还使用一个Ubertooth来验证我所看到的是正确的。)
还请注意,一旦您从设备上看到过广告,除非在扫描选项中将CBCentralManagerScanOptionAllowDuplicatesKey
设置为true,否则在该扫描过程中将不会再看到广告。该标志在后台被忽略。在这种情况下,这可能不是问题,但经常使习惯于其他平台的人们绊倒。同样,除非要构建通用的BLE扫描器,否则扫描特定的服务而不是nil
几乎总是更快,更可靠。 (再次,我怀疑这是问题所在。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。