设备locking时扫描外围设备

我的中央pipe理者可以在前景和背景中检测到新的外围设备 – 我知道这一点,因为我发现一个新的外围设备时触发UNNotification。

但是,当设备被locking时,似乎不会继续扫描新的外围设备。

在我的function中,我启用了使用LE配件的背景模式以及远程通知。 我是否错过了一些可以让我在设备locking时检测新外设的BLE?

更新w /更多信息:

以下是我如何实例化我的中央pipe理器并开始扫描:

central = CBCentralManager(delegate: self, queue: nil, options: [CBCentralManagerOptionRestoreIdentifierKey : kRestoreIdKey]) central!.scanForPeripherals(withServices: [kMyService, kMyOtherService], options: [CBCentralManagerScanOptionAllowDuplicatesKey : true]) 

这是启用的背景模式: 在这里输入图像说明

此外,背景模式的plist键: 在这里输入图像说明

任何想法为什么我的本地通知将触发时,它在前景或背景扫描,但不是当屏幕locking?

作为一个蓝牙中央后台应用程序,您应该能够继续扫描设备locking,但只有当您扫描特定的服务UUID。

指定蓝牙中央背景模式的应用程序允许在后台进行扫描。 也就是说,他们必须明确地扫描一个或多个服务,方法是在serviceUUIDs参数中指定它们。 在后台扫描时,CBCentralManager扫描选项被忽略。

您无法在后台扫描任意设备。 (在某些情况下,你可能会忽略它,但这并不意味着它被支持。)

也就是说,当设备被locking时(因为没有前景应用程序扫描,并且系统通常通过closures天线来试图节省电力),扫描间隔可以大大增加。 如果您的设备也具有很长的广告时间间隔(尤其是没有build议的广告时间间隔),那么两者可能需要很长时间才能相互发现(请考虑分钟,而不是几秒钟)。

如果所有正在扫描外围设备的应用都处于后台,则中央设备扫描广告数据包的时间间隔将会增加。 因此,发现广告外设可能需要更长的时间。

build议的广告时间间隔列表在“ 蓝牙devise指南”第3.5节中。

  • 152.5毫秒
  • 211.25毫秒
  • 318.75毫秒
  • 417.5毫秒
  • 546.25毫秒
  • 760毫秒
  • 852.5毫秒
  • 1022.5毫秒
  • 1285毫秒

有关该主题的有用线索。