【问题标题】:Does a didLostPeripheral (or similar method) exists in CoreBluetoothCoreBluetooth 中是否存在 didLostPeripheral (或类似方法)
【发布时间】:2019-11-30 20:15:30
【问题描述】:

CoreBluetooth 中是否存在与didDiscoverPeripheral: 相反的didLostPeripheral 方法?当外设停止广告时调用的方法。我很确定答案是,但我宁愿错也不要抱歉。我在CBCentralManagerDelegate 中没有发现任何类似的内容。

动机
这个想法是能够维护一个活动的外设列表来宣传特定的服务

发布脚本
我希望找到类似于 NSNetService 中的 NSNetServiceBrowserDelegate 的委托方法,但这是一个不同的框架,具有不同的目的。

【问题讨论】:

    标签: ios objective-c core-bluetooth


    【解决方案1】:

    正如您所怀疑的,答案是“否”。如果您连接到外围设备,那么当外围设备超出范围时,您将收到 didDisconnect 委托回调。

    如果您的应用在前台运行,那么您可以使用allowDuplicates 扫描键重复接收广告包。然后,您可以维护自己已查看的外围设备列表。

    一般算法是这样的:

    • 当看到外围设备时 (didDiscover) 将其添加到列表中,如果不存在并将年龄设置为 0
    • 每一秒都会遍历列表,从而增加年龄。删除任何年龄为 5 岁的外围设备

    【讨论】:

    • 如果扫描设备在 FG 中就可以了。它在 BG 中不起作用。另一种解决方案是让扫描设备每隔一秒左右调用一次扫描方法。这将在后台工作。
    • 您不能真正在后台每秒左右执行一次扫描;没有支持的后台执行模式允许这样做。没有真正适用于后台的解决方案,但您通常不需要。
    猜你喜欢
    • 1970-01-01
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    相关资源
    最近更新 更多