使用Core Bluetooth在后台获取蓝牙低功耗外设的广告信息

7
我在尝试让我的应用程序在后台运行时接收蓝牙LE外围设备的广告信息,但是我遇到了麻烦。也就是说,当我的应用程序在后台运行时,它从未到达didDiscoverPeripheral()方法——其中包含广告信息。有没有人知道我需要如何配置我的应用程序,以便可以在我的应用程序在后台运行时获取蓝牙LE广告?这可以通过在我的应用程序在后台运行时进行轮询线程来完成吗?注意:我想要获取所有BLE设备的广告,而不是定义数量的BLE设备。
感谢您的帮助,
Casey
1个回答

8
我正在使用我的应用程序进行操作。
在后台模式下,据说CoreBluetooth的速度比外围设备的广告间隔慢了多达55倍。为了加快速度,我将外围设备编程为在前30秒内每20毫秒广告一次。
此外,您必须在项目目标-信息中使用“应用程序使用CoreBluetooth通信”来定义“需要后台模式”。
在后台模式下,应用程序查找外围设备需要花费一些时间。

1
我很感激你的帮助。一回到家,我就会尝试这个方法,并告诉你它是否有效。为了确保你理解,你的应用程序将能够到达didDiscoverPeripheral()方法,从而允许你的应用程序解析外设广告。 - CaseyG
嗯,我还是没能让它正常工作。我按照你的建议将广告间隔调整为20毫秒。我觉得问题可能是我在使用无限制扫描(例如:scanForPeripherals:nil options:options),而不是受限制的扫描。有人在这里提到,当你的应用进入后台时,iOS可能会取消无限制扫描(链接:https://dev59.com/8mkw5IYBdhLWcg3wbqAS)。你是使用无限制扫描还是受限制的扫描?我想在我的应用中使用无限制扫描,如果可能的话。谢谢你的帮助。 - CaseyG
好的,我搞定了。你必须使用受限扫描,并将间隔设置在约20毫秒左右,就像Henrik提到的那样。谢谢。 - CaseyG
2
你们说的设置间隔是什么意思?我找不到任何提供这个功能的函数。能帮忙吗? - Dave Leverton
@CaseyG 如果广告是20毫秒,那么iOS端大约多久能收到广告数据包?是几百毫秒、几秒钟还是几十秒钟?谢谢。 - foresightyj
1
抱歉,刚刚注意到你们的评论(Dave/Foresightyj)。您必须使用固件将BLE外设设置为以20毫秒间隔进行广告。当BLE外设设置为以20毫秒间隔进行广告时,我的应用程序能够在大约2-5秒内在后台捕获广告。 - CaseyG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接