我的中央管理员可以检测前台和后台的新外围设备 - 我知道这是因为我在找到新的外围设备时触发了UNNotification。
但是,当设备锁定时,它似乎不会继续扫描新的外围设备。
在我的功能中,我启用了使用LE配件的背景模式以及远程通知。我错过了BLE的东西,可以让我在设备锁定时检测到新的外围设备吗?
更新w / more info:
以下是我实例化我的中央管理员并开始扫描的方法:
central = CBCentralManager(delegate: self, queue: nil, options: [CBCentralManagerOptionRestoreIdentifierKey : kRestoreIdKey])
central!.scanForPeripherals(withServices: [kMyService, kMyOtherService], options: [CBCentralManagerScanOptionAllowDuplicatesKey : true])
我知道为什么我的本地通知会在前景或后台扫描时触发,但不会在屏幕被锁定时触发?
答案 0 :(得分:3)
作为蓝牙中央后台应用程序,您应该能够在设备锁定时继续扫描,但前提是您正在扫描特定服务UUID。
指定蓝牙中央背景模式的应用程序可以在后台扫描。也就是说,他们必须通过在serviceUUIDs参数中指定它们来显式扫描一个或多个服务。在后台扫描时忽略CBCentralManager扫描选项。
您无法在后台扫描任意设备。 (在某些情况下,你有可能逃脱它,但这并不意味着它得到了支持。)
也就是说,当设备被锁定时,扫描间隔可以大大增加(因为没有前景应用程序扫描,并且系统通常试图通过关闭天线来节省电力)。如果您的设备也具有较长的广告间隔(特别是如果它没有推荐的广告间隔之一),那么两者可能需要很长时间才能发现彼此(想想分钟,不是秒。)
如果扫描外围设备的所有应用都在后台,则中央设备扫描广告数据包的时间间隔会增加。因此,发现广告外围设备可能需要更长时间。
建议的广告时间间隔列表位于Bluetooth Design Guidelines第3.5节。