【问题标题】:didn't get didDiscover peripheral ibeacon in background在后台没有得到 didDiscover 外围 ibeacon
【发布时间】:2017-05-22 06:29:13
【问题描述】:

当我这样指定服务时:

centralManager.scanForPeripherals(withServices: [BEAN_SERVICE_UUID], options: [CBCentralManagerScanOptionAllowDuplicatesKey : true])

我确定我输入了正确的BEAN_SERVICE_UUID。事实证明,当我在前台执行该功能时,我可以获得 didDiscover 外围回调。

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) { print(advertisementData) }

这是我的常规设置功能和我的info.plist

那么,我必须做什么才能使 ScanForPeripheral / didDiscover 外围设备工作?

*已编辑 经过多次测试,我发现我的应用程序可以执行后台扫描外围设备,但只是在应用程序安装后的初始启动(仅一次)之后,ScanForPeripheral / didDiscover 外围设备无法在后台工作。

【问题讨论】:

  • 您可以尝试使用 centralManager.scanForPeripherals(withServices: nil) 扫描所有未指定 UUID 的设备。 CBCentralManagerScanOptionAllowDuplicatesKey 键在后台被忽略,因此您也可以跳过它进行测试。另外,也许您在控制台中有一些错误?
  • 在一些搜索中,我知道如果我们想在后台和前台扫描,我们必须指定 UUID。我没有错误日志,但未发现外围设备。经过多次测试,我发现我的应用可以进行后台扫描外围设备,但只是在应用安装后的初始启动(仅一次)
  • 第一次吃完午饭后,你没有忘记取消外围连接吗?
  • 我没有忘记。但我的后台扫描没有任何反应
  • 是否调用了 func centralManagerDidUpdateState(_ central: CBCentralManager)?你能提供你在这个方法中做了什么吗?

标签: ios swift bluetooth-lowenergy ibeacon


【解决方案1】:

当您在后台发现蓝牙外围设备时,CBCentralManagerScanOptionAllowDuplicatesKey 会被自动忽略并设置为 false。话虽如此,您只会在后台收到一个广告数据包,您必须对其进行一些操作。如果你不这样做,这个外设将永远不会再次调用 didDiscover 方法。

对于 iBeacons,您应该使用 CoreLocation 框架。

【讨论】:

  • 所以,我必须将 CBCentralManagerScanOptionAllowDuplicatesKey 设置为 true 还是 false?你是什​​么意思在后台只收到一个广告包?你能解释一下吗?
  • 在后台允许重复标记将被忽略。这意味着您现在只会获得新设备的 didDiscoverPeripheral 回调。如果在前台看到所有设备,则根本不会收到回调。
  • 如果我使用 CoreLocation 框架,我可以发现信标、连接、写入和读取吗?
  • 当 CoreLocation 信标方法告诉您已关闭时,您可以开始扫描外围设备
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-27
  • 1970-01-01
  • 2013-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多