根据iOS CLLocationManager API,当发生重大变化时,startmonitoringsignificantlocationchanges
将通知我的应用程序,例如500 mtrs或以上。
但我想在我的应用程序中,就像我的应用只有在用户/设备进入新城市时才会收到通知一样。如果应用程序处于关闭状态,则应自动打开。
注意:它不是地图/导航应用程序,所以我不想让我的应用程序一直监控用户的位置数据,并在最后耗尽设备的电池。
请提出一些解决方案。
它将执行您的应用程序。(很抱歉,这不是一条评论,但评论太长了)。
请参阅以下详细信息(来自Apple文档)
要启动区域监视,请配置相应的区域对象,并将其传递给位置管理器的startMonitoringForRegion:方法。在iOS中,注册区域在应用程序启动之间持续存在。如果在iOS应用程序未运行时发生区域边界跨越,系统会在后台自动唤醒(或重新启动),以便处理事件。在这种情况下,传递给应用程序委托的application:didFinishLaunchingWithOptions:method的选项字典包含键UIApplicationLaunchOptionsLocationKey,用于指示您的应用程序是由于位置相关事件而启动的。在重新启动过程中,必须重新创建位置管理器对象,并分配一个能够处理区域相关事件的委托。完成此操作后,系统会发送启动应用程序的区域通知。您之前配置的所有区域都可以在您创建的任何位置管理器对象的monitoredRegions属性中使用。
我认为您需要CLLocationManager类的方法:
- (void)startMonitoringForRegion:(CLRegion *)region
参数region
定义要监视的边界的region对象。此参数不能为零。讨论对于要监视的每个区域,必须调用此方法一次。如果具有相同标识符的现有区域已经被应用程序监视,则旧区域将被新区域替换。使用此方法添加的区域由应用程序中的所有位置管理器对象共享,并存储在monitoredRegions属性中。
Region事件将传递到您的代理的locationManager:didEnterRegion:和locationManager:didExitRegion:方法。如果出现错误,位置管理器将调用代理的locationManager:monitoringDidFailForRegion:withError:方法。
一个应用程序一次最多可以注册20个地区。为了及时报告区域变化,区域监控服务需要网络连接。