ios - didEnterRegion 的执行顺序?

标签 ios objective-c cllocationmanager uilocalnotification region

所以我问了一个关于我与 didEnterRegion 相关的代码的问题,但也许我太具体了,因此我可以请人用更通用的术语来澄清方法调用的顺序以进行区域监控,特别是当应用程序在后台时。

我的理解是:

  • 应用注册区域调用 startMonitoringForRegion:
  • 用户点击主页按钮或锁定设备,应用程序进入后台。
  • 设备位置在操作系统级别进行监控,与应用程序分开,操作系统永远不会启动应用程序来确认用户当前位置。
  • 当用户越过边界进入区域时,操作系统会查找最初注册该区域的应用程序并启动该应用程序。
  • 应用程序在后台启动(但没有调用 didFinishLaunchingWithOptions:),设置了 CLLocationManager 委托(delegate)并调用了它的 didEnterRegion 委托(delegate)方法。
  • 在我的情况下,这会设置一个立即显示的 UILocalNotification(例如,如果正在使用另一个应用程序,则横幅显示在主屏幕上,如果手机处于休眠状态,则显示在锁定屏幕上)。
  • 用户通过在锁定屏幕中滑动或点击横幅来操作通知,启动应用程序并调用 appWillEnterForeground/appWillBecomeActive 并调用应用程序委托(delegate) didRecieveLocalNotification: 方法(如果已实现)。

  • 这是我的理解,这可能是错误的,因为如果应用程序在后台,我的 UILocalNotification 永远不会被触发。有人可以澄清哪些位是错误的吗?

    最佳答案

    经过进一步测试,我得出的结论是,我的代码没有任何问题,实际上似乎是 Apple 对区域监控的实现很差。它似乎只比对显着位置变化的监测稍好,并且仍然依赖于 wifi 网络和手机信号塔的变化。即使在英国的一个主要城市中,我发现 didEnterRegion 直到你进入一英里宽的区域 1000 米时才会被触发,如果被触发的话。这解释了为什么每次通过 Xcode 测试并强制定位时它都能正常工作。

    到目前为止,我想出的唯一解决方法是计算每次更新用户位置时剩余的距离,并在小于区域半径/2 时手动调用 didEnterRegion 委托(delegate)方法。当您进入边界超过 10m 时,这应该由 Apples 代码自动完成,但是由于上述原因,我发现这是不可靠的。

    但是,鉴于您无法在应用程序处于后台时使用更准确的 GPS 获得定期更新,而这只是应用程序处于后台时的问题,这根本不是一个真正的解决方案。 :o(

    关于ios - didEnterRegion 的执行顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19767083/

    相关文章:

    ios - 如何在 iOS 应用程序中验证 Aadhar 号码?

    ios 图片文字和颜色增强滤镜

    ios - 将应用程序更新到 iOS 7 时,奇怪的 Storyboard会推送 segue。

    objective-c - CoreData - 通过 ObjectID 检索实体时无法识别的选择器

    ios - requestLocation() 在使用 Swift 2 的模拟器中总是失败

    iOS : alert user for specific Geo location area (lat, 长)

    ios - 使用 kCLLocationAccuracyBestForNavigation 进行非导航

    ios - 集成:我应该为图像选择哪种类型的全局标识符?

    ios - 在 Parse.com 上处理音频

    ios - AudioQueue 字节到 ffmpeg 可理解的 WAV 格式