【问题标题】:CoreBluetooth Background Scan DeviceCoreBluetooth 后台扫描设备
【发布时间】:2012-12-02 03:06:05
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你解决问题了吗?我需要你的帮助。

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


【解决方案1】:

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

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

【讨论】:

  • 这是正确答案。此外,您应该确保外围设备实际上在广告数据包中广告服务。通常不会在此处宣传所有服务。
【解决方案2】:

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

【讨论】:

  • 您能解释一下您对广告包的含义吗?
  • 广告包是广泛的。我想在后台扫描
【解决方案3】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    • 1970-01-01
    相关资源
    最近更新 更多