【问题标题】:didExitRegion not fired when turn off bluetooth关闭蓝牙时没有触发 didExitRegion
【发布时间】:2015-08-18 20:29:45
【问题描述】:

我正在使用 IBeacon 构建一个简单的 ios 应用程序,我正在监视一个区域,但我在进入和退出事件方面遇到了一些问题。

如果我进入某个区域,则会触发回调 didEnterRegion,但在该区域内,关闭蓝牙不会触发 didExitRegion 回调。这是预期的行为吗?

这是一个问题,因为我必须能够检测到用户何时退出该区域。有什么想法吗?

谢谢

【问题讨论】:

  • 您是否尝试过实现didDetermineState 以及didEnter/Exit?后者只会在状态从“外部”变为“内部”时发生,反之亦然。可能是禁用蓝牙会将状态推为“未知”,因此当您稍后在区域外启用蓝牙时,它不会触发退出。但是,它应该触发状态更改,并调用 didDetermineState

标签: ios objective-c bluetooth core-location ibeacon


【解决方案1】:

出于测试目的,您必须关闭信标或移出范围以获得didExitRegion 事件。

一旦CoreLocation 确定它在CLBeaconRegion 内,它只会在有机会进行蓝牙扫描 3 秒后将状态更改为在区域外,在此期间没有匹配 CLBeaconRegion 的信标检测到。如果蓝牙未开启,则无法通过扫描做出此决定。

如果您想在这种情况下强制退出您的应用,请考虑监听 CoreBluetooth 生命周期事件。关机时,您可以注销每个CLBeaconRegion,手动触发didExitRegion 逻辑,然后使用CoreLocation 注销它们。

【讨论】:

  • 如果我启用“使用蓝牙 LE 配件”后台功能,“centralManagerDidUpdateState:”会在后台唤醒应用程序吗?
  • 我不这么认为,不。这是一个仅限前台的回调。
  • @davidgyound 是的,我就是这么想的。无论如何试一试,它似乎正在工作(当我收到回调时显示 UILocalNotification )。至少在等待足够长的时间让应用程序终止之后,但如果用户在多任务窗口中明确地终止了应用程序,则不会。我似乎记得,如果用户明确杀死了应用程序,iOS 会阻止某些 BLE 活动。还是这样吗?如果是这样,您是否知道“优雅地”终止应用程序以便我可以测试的方法?谢谢!
  • 您可以重新启动...但我怀疑这不起作用。您也可以尝试使用 Google 地图并进行大量平移和缩放。它会占用内存并可能导致操作系统驱逐其他应用程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
相关资源
最近更新 更多