0

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

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

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

请提出一些解决方案。

4

2 回答 2

1

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

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

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

于 2015-04-13T15:01:40.730 回答
0

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

- (void)startMonitoringForRegion:(CLRegion *)region

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

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

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

于 2015-04-13T13:58:46.533 回答