CoreBluetooth后台扫描设备

时间:2012-12-14 05:25:49

标签: iphone objective-c ios core-bluetooth bluetooth-lowenergy

我目前正在开发一款需要我使用蓝牙4.0扫描设备的应用。此时我遇到了一个问题。

当应用在后台运行时,是否可以让应用扫描设备?由于某种原因,该应用程序无法扫描设备。该应用程序在后台运行时未调用didDiscoverPeripheral。但是,一旦建立连接,我的应用就可以从设备接收数据。

为了简化操作,为什么我的应用程序在后台运行时无法扫描设备?

P.S。我确实输入了必需的背景模式 1.App使用CoreBluetooth进行通信 2.App使用CoreBluetooth分享数据

3 个答案:

答案 0 :(得分:4)

在后台扫描是一个非常缓慢的过程。 Apple表示它比前景慢55倍。我的经验表明它可能更慢。因此,为了在后台扫描设备,请记住以下内容:

  1. 确保其他设备以最高速度(20毫秒)进行广告宣传并宣传您正在扫描的服务。这个答案中有一个例子:https://stackoverflow.com/a/18113505/768935
  2. 由于扫描速度降低,请为应用程序提供更多时间来查找设备。
  3. 确保使用指定的服务开始扫描。您无法在后台扫描nil服务。
  4. 在后台忽略允许重复选项进行扫描。

答案 1 :(得分:0)

将服务或数据放入广告包中!如果您希望iPhone更快地发现它,也可以快速设置广告周期。我在前30秒使用20毫秒。 br henrik

答案 2 :(得分:0)

另一个可能是问题的问题是您必须扫描特定服务,例如:

    [myCentralManager scanForPeripheralsWithServices:@[serviceUUID] options:nil];

而不是将“with services”参数设为nil。我认为这是一个巨大的问题,在Apple的文档中几乎没有低声说,只在该方法的描述中提到过,而在Core Bluetooth Backgrounding文档中没有提及。