iOS - 设备/用户进入新城市时的区域监控?

Posted

技术标签:

【中文标题】iOS - 设备/用户进入新城市时的区域监控?【英文标题】:iOS - Region monitoring when device/user into new city? 【发布时间】:2015-04-13 13:24:52 【问题描述】:

根据 ios CLLocationManager API startmonitoringsignificantlocationchanges 将在发生重大变化时通知我的应用程序,例如500 米或更多。

但我希望在我的应用中,我的应用只有在用户/设备进入新城市时才会收到通知。如果处于关闭状态,应用程序应自动打开。

注意:它不是地图/导航应用程序,所以我不想让我的应用程序继续监控用户的位置数据并最终耗尽设备的电池。

请提出一些解决方案。

【问题讨论】:

您仅限于 64 个区域,因此您需要将重大位置更改和区域监控结合起来。城市检测中没有构建,您必须自己构建。此外,您不能将您的应用程序带到前台,您仅限于本地通知。 【参考方案1】:

它将执行您的应用程序。 (抱歉,这不是评论 - 但评论太长了)。

请参阅下面的详细信息(来自 Apple 文档)

要启动区域监控,请配置适当的区域对象并将其传递给位置管理器的 startMonitoringForRegion: 方法。在 iOS 中,注册区域会在您的应用程序启动之间持续存在。如果在您的 iOS 应用程序未运行时发生区域边界交叉,系统会在后台自动将其唤醒(或重新启动),以便它可以处理该事件。在这种情况下,传递给 application:didFinishLaunchingWithOptions: 应用程序委托方法的选项字典包含键 UIApplicationLaunchOptionsLocationKey 以指示您的应用程序是由于与位置相关的事件而启动的。在重新启动过程中,您必须重新创建您的位置管理器对象并分配一个能够处理与区域相关的事件的委托。完成此操作后,系统会发送启动您的应用程序的区域通知。您之前配置的所有区域都在您创建的任何位置管理器对象的受监控区域属性中可用。

【讨论】:

感谢 Sfirite。这里有一个问题。配置区域对象并将其传递给 startMonitoringForRegion: 后,用户是否必须始终启用(保持开启)位置服务以进行越界通知?如果用户关闭了位置通知和区域边界,几天后如果我再次启动位置服务会怎样。是否会通知我的应用程序已在特定日期和时间信息上越界? 如果用户关闭应用程序的定位服务,您将一无所获。您应该检查这种情况并要求用户打开位置服务。 根据我一年前的经验,这个功能并不稳定。当然有可能我做错了什么(我们有一个非常具体的算法)【参考方案2】:

我认为你需要 CLLocationManager 类的方法:

- (void)startMonitoringForRegion:(CLRegion *)region

参数 地区 定义要监视的边界的区域对象。此参数不得为 nil。 讨论 您必须为要监控的每个区域调用一次此方法。如果应用程序已经在监视具有相同标识符的现有区域,则旧区域将替换为新区域。您使用此方法添加的区域由您应用中的所有位置管理器对象共享,并存储在受监控的Regions 属性中。

Region 事件被传递到你的委托的 locationManager:didEnterRegion: 和 locationManager:didExitRegion: 方法。如果有错误,位置管理器会调用你的代理的 locationManager:monitoringDidFailForRegion:withError: 方法。

一个应用一次最多可以注册 20 个区域。为了及时报告区域变化,区域监控服务需要网络连接。

【讨论】:

谢谢。因此限制为 20,应用程序只能通知附近城市的 20 个。还想确认如果我的应用程序关闭并且 locationManager:didEnterRegion 事件被传递到我的应用程序怎么办?来到前台还是我必须显示本地通知?

以上是关于iOS - 设备/用户进入新城市时的区域监控?的主要内容,如果未能解决你的问题,请参考以下文章

核心位置、iBeacon 和区域监控

Infortrend存储性能稳定,吸引南通市智慧交通监控大力采购

iOS 在后台监控/测距信标会消耗大量电池

保持 iOS 应用程序处于唤醒状态以监控运动

纤亿通协助公安扩大监控传输

应用程序在后台时的地理围栏设备