蓝牙后台模式IOS

Posted

技术标签:

【中文标题】蓝牙后台模式IOS【英文标题】:Bluetooth Background mode IOS 【发布时间】:2018-10-29 15:52:43 【问题描述】:

几天前我一直在寻找我的蓝牙问题,但没有找到任何有用的解决方案。我想在后台通过ios应用程序更精确地读取来自外围设备的广告数据制造数据。就我而言,外围设备是 Nordic nrf51822 芯片,中心设备是 ios 手机。我已经成功实现了蓝牙后台​​模式,并且在 ios 设备上运行良好。发现新外围设备时调用事件处理程序 DiscoveredPeripheral。但问题是它只在外围设备第一次变得可见时才被调用。如果我关闭并打开外围设备,则不再调用 DiscoverdPeripheral 事件。我知道这是 ios 限制,但我不知道如何处理这个 ios 限制。最后,我希望后台的应用程序开始定期扫描具有特定 UUID 的外围设备,例如每 10 分钟一次。在这一点上,我想问一下这个场景是否可以在 ios 中实现,如果可以的话,我很感激任何帮助。

【问题讨论】:

【参考方案1】:

发现新外围设备时调用事件处理程序 DiscoveredPeripheral。

这是不正确的。每次调用scanForPeripherals 时只会调用一次。当设备连接时,您应该停止扫描。当设备断开连接时,您应该看到centralManager(_:didDisconnectPeripheral:error:),您可以再次开始扫描。

更好的是,如果您只想重新连接到同一设备,则根本不要扫描。只需为该外围 UUID 调用 connect。它会在您在后台继续运行,并在连接成功时唤醒您。

为了进一步推动这一点,请实现Bluetooth State Restoration,这将允许您在重新启动后自动重新连接。

【讨论】:

感谢罗布·纳皮尔的回复。我完全理解你的情况,但我有两个担忧。 1)当ios连接到设备,然后读取特征,断开连接并再次扫描,我不知道会发生什么。 ios 将尝试再次连接到同一设备还是继续连接下一个设备。 2)如果我理解正确,扫描可以无限长地工作,或者我在后台扫描的时间有限。 扫描与您之前连接的内容无关。它在当前扫描之后没有内存。它会发现它首先看到的任何东西。是的,扫描可以无限期地运行。呼叫连接也可以。它可以运行数周而不会出现问题。 我的第二个问题得到了明确的答案,并感谢 Rob。我想对我的第一个问题发表评论。请想象我们有五台设备,IOS 开始扫描并找到其中一台,然后连接、读取、断开连接并再次开始扫描。此时 IOS 有 5 个可供发现的设备。在更糟糕的情况下,IOS 可能会一次又一次地找到相同的设备。这意味着 ios 从未发现其余四个设备。希望您能理解我对多设备的担忧。 你说的完全正确。您的工作是不断搜索,直到找到所需的所有设备。如果需要,您可以在连接时继续扫描(尽管这会影响您可靠连接的能力,尤其是在嘈杂的区域;您在天线上所做的一切都会共享时间并干扰天线上的其他事情)。在一次扫描期间删除重复项的事实只是一个方便的功能;你可以用CBCentralManagerScanOptionAllowDuplicatesKey关闭它。 不要忘记大多数设备在连接后会停止广告。这不能保证,但它很常见。许多设备在启动一段时间后也会停止广告,或者需要按下按钮才能进行广告。所有这些都高度依赖于设备。

以上是关于蓝牙后台模式IOS的主要内容,如果未能解决你的问题,请参考以下文章

仅适用于部分用户的蓝牙 iOS 后台模式

后台模式下的 iBeacon 访问

在 iOS 的后台模式下将数据从 Central 传输到外围设备

在后台使用 iBeacon 或 CoreBluetooth 识别 iOS 设备

iOS:如何在我的音乐应用程序中播放蓝牙耳机中的缓冲音频?

iOS蓝牙开发:蓝牙的连接和数据的读写