核心蓝牙:如果重新安装应用程序而没有在应用程序中正确断开BLE设备,则无法再次在应用程序中找到BLE设备
Posted
技术标签:
【中文标题】核心蓝牙:如果重新安装应用程序而没有在应用程序中正确断开BLE设备,则无法再次在应用程序中找到BLE设备【英文标题】:Core Bluetooth: Cannot find a BLE device in the app again if reinstalling the app without disconnecting the BLE device properly in the app 【发布时间】:2021-07-14 17:48:36 【问题描述】:当我在不断开 BLE 设备的情况下重新安装应用程序时,手机会保持连接,因此当我重新安装我的应用程序并扫描 BLE 设备时,最后一个连接将出现在操作系统级别,而不是应用内级别。如果之前未在应用程序上正确断开连接,这会导致我无法发现 BLE 设备。我的测试人员坚持认为,如果我重新安装应用程序,无论如何我都不应该看到连接并发现 BLE 设备。
如果我知道 UUID 和服务,我可以在应用程序中检索 BLE 设备连接,但正如我在文档中看到的那样,没有这些是不可能的。有没有其他方法可以解决这个问题?
【问题讨论】:
【参考方案1】:这正是retrieveConnectedPeripherals(withServices:)
的用途。这将返回已经连接(在操作系统级别)的外围设备,这些外围设备会宣传特定的服务列表。
您仍然需要在返回的外围设备上调用 connect
。在这种情况下,“连接”是指“连接到应用程序”,而不是“连接到设备”。文档将这些“应用”连接称为“本地”。
【讨论】:
问题是我想如何让服务调用这个方法?在新的应用程序中,我不会将服务存储在应用程序中。如果您不提供服务,此调用将不起作用。 您提供的是服务 UUID,而不是 CBServices。您当然需要知道服务 UUID。这是几乎所有核心蓝牙用例的典型特征。唯一的例外是通用蓝牙扫描仪,它不会正确发现没有广告的设备。 那么如果我不知道UUID就无法检索。 不,但是您要解决什么问题?获取所有连接的设备(即使是你不知道的设备)会泄露个人可追踪信息,我不确定你会用它做什么。我建议打开对 Apple 的反馈,解释您正在解决的用户问题并要求改进。 (而且我也很想了解更多关于您正在解决的问题。) 明确一点:您不需要知道 设备 的 UUID。您只需要知道您感兴趣的至少一项服务的 UUID。如果您不打算与已知服务进行通信,您将如何处理这些信息(在 nRF Connect 等通用 BLE 扫描仪之外) ,哪个看到做广告的东西)?另请注意,如果没有应用程序在使用它,通常连接会在相当短的时间内断开。因此,对于 BLE 扫描仪,发现问题会相对较快地自行解决。以上是关于核心蓝牙:如果重新安装应用程序而没有在应用程序中正确断开BLE设备,则无法再次在应用程序中找到BLE设备的主要内容,如果未能解决你的问题,请参考以下文章