5

我目前正在开发一个需要我使用蓝牙 4.0 扫描设备的应用程序。在这一点上,我遇到了一个问题。

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

为简单起见,为什么我的应用程序在后台运行时无法扫描设备?

PS 我确实输入了所需的背景模式 1.App 使用 CoreBluetooth 进行通信 2.App 使用 CoreBluetooth 共享数据

4

3 回答 3

6

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

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

另一件事可能是一个问题,您必须扫描特定服务,如下所示:

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

而不是让“with services”参数为零。我认为这是一个很大的问题,在 Apple 的文档中几乎没有提及,仅在该方法的描述中提到,而在 Core Bluetooth Backgrounding 文档中也没有提及。

于 2013-10-17T16:02:36.903 回答
0

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

于 2012-12-14T22:59:14.430 回答