Ios 设备锁定时扫描外围设备

Ios 设备锁定时扫描外围设备,ios,bluetooth-lowenergy,core-bluetooth,Ios,Bluetooth Lowenergy,Core Bluetooth,我的中央管理器可以在前台和后台检测新的外围设备-我知道这一点,因为当它发现新的外围设备时,我会触发一个未被注意的事件 但是,当设备被锁定时,它似乎不会继续扫描新的外围设备 在我的能力范围内,我已经启用了使用LE附件的后台模式,以及远程通知。当设备锁定时,我是否缺少BLE可以检测新外围设备的功能 更新w/更多信息: 以下是我如何实例化我的中央管理器并开始扫描: central = CBCentralManager(delegate: self, queue: nil, options: [CBCe

我的中央管理器可以在前台和后台检测新的外围设备-我知道这一点,因为当它发现新的外围设备时,我会触发一个未被注意的事件

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

在我的能力范围内,我已经启用了使用LE附件的后台模式,以及远程通知。当设备锁定时,我是否缺少BLE可以检测新外围设备的功能

更新w/更多信息:

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

central = CBCentralManager(delegate: self, queue: nil, options: [CBCentralManagerOptionRestoreIdentifierKey : kRestoreIdKey])
central!.scanForPeripherals(withServices: [kMyService, kMyOtherService], options: [CBCentralManagerScanOptionAllowDuplicatesKey : true])
以下是启用的后台模式:

此外,背景模式的plist键:


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

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

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

您不能在后台扫描任意设备。(在某些情况下,您可能会侥幸逃脱,但这并不意味着它受到支持。)

也就是说,当设备被锁定时,扫描间隔可以显著增加(因为没有前台应用程序扫描,并且系统通常试图通过关闭天线来节省电源)。如果您的设备也有很长的广告时间间隔(特别是如果它没有推荐的广告时间间隔),那么这两个设备可能需要很长时间才能发现对方(想想几分钟,而不是几秒钟)

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

第3.5节列出了推荐的广告时间间隔

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

我明确扫描特定服务,因此我不确定为什么我的应用程序在设备锁定时似乎没有扫描外围设备。我在最初的问题中添加了更多细节,以帮助进一步诊断(如果可能的话)。感谢您记住,
CBCentralManagerScanOptionAllowDuplicatesKey
将在后台被忽略。如果扫描已看到此设备,则不会再次看到它。你为什么打开这个?这通常不是一个好主意。尽管如此,我仍然怀疑你们的广告时间间隔太长或选择不当。您的设备使用的间隔时间是多少?我在Simblee外围设备上将间隔时间更改为152.5,但我的应用程序仍无法发现手机何时被锁定。即使手机被锁定,您也可以在后台模式下连接到外围设备,方法是:centralManager:willRestoreState:method。我不认为如果iOS关闭你的应用程序来释放内存,你可以扫描设备。我可能错了。