设备锁定时扫描外围设备

时间:2017-03-13 23:36:24

标签: ios bluetooth-lowenergy core-bluetooth

我的中央管理员可以检测前台和后台的新外围设备 - 我知道这是因为我在找到新的外围设备时触发了UNNotification。

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

在我的功能中,我启用了使用LE配件的背景模式以及远程通知。我错过了BLE的东西,可以让我在设备锁定时检测到新的外围设备吗?

更新w / more info:

以下是我实例化我的中央管理员并开始扫描的方法:

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

以下是启用的后台模式: enter image description here

此外,背景模式的plist键: enter image description here

我知道为什么我的本地通知会在前景或后台扫描时触发,但不会在屏幕被锁定时触发?

1 个答案:

答案 0 :(得分:3)

作为蓝牙中央后台应用程序,您应该能够在设备锁定时继续扫描,但前提是您正在扫描特定服务UUID。

  

指定蓝牙中央背景模式的应用程序可以在后台扫描。也就是说,他们必须通过在serviceUUIDs参数中指定它们来显式扫描一个或多个服务。在后台扫描时忽略CBCentralManager扫描选项。

您无法在后台扫描任意设备。 (在某些情况下,你有可能逃脱它,但这并不意味着它得到了支持。)

也就是说,当设备被锁定时,扫描间隔可以大大增加(因为没有前景应用程序扫描,并且系统通常试图通过关闭天线来节省电力)。如果您的设备也具有较长的广告间隔(特别是如果它没有推荐的广告间隔之一),那么两者可能需要很长时间才能发现彼此(想想分钟,不是秒。)

  

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

建议的广告时间间隔列表位于Bluetooth Design Guidelines第3.5节。

  • 152.5 ms
  • 211.25 ms
  • 318.75 ms
  • 417.5 ms
  • 546.25 ms
  • 760 ms
  • 852.5 ms
  • 1022.5 ms
  • 1285 ms

Useful thread on the topic.