用于 ScanForPeripheral 的状态保留和恢复 iOS

Posted

技术标签:

【中文标题】用于 ScanForPeripheral 的状态保留和恢复 iOS【英文标题】:State Reservation and Restoration iOS for ScanForPeripheral 【发布时间】:2017-05-24 01:32:51 【问题描述】:

    国家保留和恢复可以scanForPeripherals(withServices: nil, options: [CBCentralManagerScanOptionAllowDuplicatesKey : true] 吗?

    我的目标是从后台扫描、连接和写入外围设备。 到目前为止,我知道后台扫描需要特定的服务 UUID。 是否有另一种方法可以在不定义服务 UUID 的情况下在后台进行扫描等?

我正在使用 iBeacon 和 swift 3

【问题讨论】:

不清楚您要达到的目标是什么?如果您不知道它将宣传什么服务,您如何连接到外围设备并对其进行写入? 我正在尝试扫描/发现外围设备而不定义服务 uuid。我只是确保后台任务的行为与前台不同。在前台我们可以连接到外围设备,即使我们不知道它的服务 uuid 但在后台不知道。对吗? 正确。在前台,您可以使用nil 发现所有外围设备。 好的。谢谢保罗 【参考方案1】:

很遗憾,不,如果您不提供服务 UUID,CoreBluetooth 根本不会提供回调,除非您的应用在前台。

【讨论】:

好的。那么,如果我没有服务 UUID,我可以使用 kCBAdvDataLocalName 在后台进行扫描吗? 不,您不能按名称扫描。您需要知道要扫描的特定服务 UUID 才能在后台进行扫描。事实上,正是 ios 发现了一个外设广告您正在扫描的服务 UUID,这将导致您的应用重新启动以进行状态恢复。 ios和android有不同的后台扫描方式吗? Android 是否需要知道服务 UUID 才能执行后台任务?我正在为 android 使用 altbeacon 插件 Android 非常不同。在后台扫描时它不需要知道服务 uuid,尽管如果你将它提供给 ScanFilter 它将有助于节省电池电量。在这种情况下,Android 信标库会自动将 Eddystone 服务 UUID 提供给 ScanFilter。

以上是关于用于 ScanForPeripheral 的状态保留和恢复 iOS的主要内容,如果未能解决你的问题,请参考以下文章

车联网中 MQTT 心跳保活与远程唤醒设计

GB28181媒体保活机制探究与实现

你这 Saga 事务保“隔离性”吗?

你这 Saga 事务保“隔离性”吗?

等保要求等保要求堡垒机审计日志保留多久?

等保要求等保要求堡垒机审计日志保留多久?