如何判断 CLLocationManager 是不是正在主动扫描信标?

Posted

技术标签:

【中文标题】如何判断 CLLocationManager 是不是正在主动扫描信标?【英文标题】:How can I tell if CLLocationManager is actively scanning for a beacon?如何判断 CLLocationManager 是否正在主动扫描信标? 【发布时间】:2014-05-05 17:31:26 【问题描述】:

当您将 ios 设备设置为信标(外围角色)时,您可以通过调用 CBPeripheralManager.isAdvertising 来查询其状态。我找不到查询设备是否在 CLLocationManager 上扫描信标(中心角色)的等效项。有任何想法吗?

更新:

鉴于 David 的回答,我封装了使用特定 UUID 设置 CLBeaconRegion 的代码,并添加了一个布尔变量,该变量在 CLLocationManager 上调用 startMonitoringRegion 和 stopMonitoringRegion 时发生更改。

【问题讨论】:

【参考方案1】:

我认为这不可能。尽管 CoreLocation 的 iBeacon API 在底层使用了蓝牙 LE 和 CoreBluetooth,但 Apple 似乎已竭尽全力隐藏此实现。没有明显的方法可以查看蓝牙 LE 扫描是否在特定时间点进行。

一般来说,当应用在前台探测 iBeacons 时,蓝牙 LE 扫描始终进行。当应用监控 iBeacons(在前台或后台)或在后台进行探测时,间接证据表明每隔几分钟就会扫描一次信标,并且确切的数字范围为 1-15,具体取决于手机型号和状态。我知道无法以编程方式检测启动和停止的确切时间,尽管 iBeacon 监控进入/退出时间可以推断出它。如果您查看下图,蓝点显示了一个特定测试用例的推断扫描时间。 this blog post 中描述了我如何推断的详细信息。

【讨论】:

以上是关于如何判断 CLLocationManager 是不是正在主动扫描信标?的主要内容,如果未能解决你的问题,请参考以下文章

核心位置,是不是可以在没有 GPS 芯片的情况下向 iPad 提供 GPS/位置日期,以便在 CLLocationManager 类中使用?

如何检查定位服务是不是开启?

CLLocationManager 如何根据 iOS 版本调用正确的委托方法

如何同时计算来自 CLLocationManager 的所有 gps 数据

飞行模式开启时 CLLocationManager 是如何获取位置的

如何从 CLLocationManager 更新创建 Observable