已停用的iOS应用程序上的地理位置

可以在应用程序关闭时向应用程序添加位置感知function吗?

例如,我想创建一个接近服务,该服务在我的应用程序关闭时起作用,并在他到达某个区域时向用户推送本地通知。

我读到CLRegion,我可以实现类似的结果,但只有在应用程序处于活动状态时(或在后台)。

我需要类似于用户位置激活的远程通知服务。 但这听起来很奇怪。 是否可以在iOS中提供类似的服务?

有两种选择:

一个是John在上面提到的重要的位置变更服务。 另一个是startRegionMonitoring

两者都包含在Apple的Location Awarness Documentation中

两者都可以在短时间内打开已终止(关闭)的应用程序,您可以发送本地推送通知以提醒用户。 应用无法进入正常状态,但如果用户点击通知,应用就会打开,这样您就可以实现目标。

以下是拦截didFinishLaunchingWithOptions委托中的事件并触发本地通知的示例代码。 通常,您不应在此处触发通知,而是重新初始化您的位置管理员,获取新位置并显示用户输入的区域的消息(本地通知)…

  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //see if application was launched from a location event! if ([launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey]) { //if so, we need to reinitialize our location manager! [[LocationManager sharedLocationManager] startSignificantLocationMonitoring]; //fire a notification UILocalNotification *notification = [[UILocalNotification alloc] init]; notification.fireDate = [NSDate date]; NSTimeZone* timezone = [NSTimeZone defaultTimeZone]; notification.timeZone = timezone; notification.alertBody = @"app did wake up"; notification.alertAction = @"OK"; notification.soundName = @"yes.caf"; [[UIApplication sharedApplication] scheduleLocalNotification:notification]; } } 

我相信您可以使用SignificantChange API来唤醒已被系统关闭(或崩溃)的应用程序。 但是你仍然应该关注区域监控,因为它可能更接近你真正想要的。

这是链接: http : //developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#//apple_ref/doc/uid/TP40007072-CH4-SW25

和相关部分:

如果在更新发生时暂停应用程序,系统会在后台将其唤醒以处理更新。 如果应用程序启动此服务然后终止,则系统会在新位置可用时自动重新启动应用程序。 此服务在iOS 4及更高版本中可用,并且仅在包含蜂窝无线电的设备上可用。

设置CLLocationManager时只需调用

 - (void)startMonitoringSignificantLocationChanges 

并以典型的方式处理任何事件作为委托回调

 - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 

请注意,如果应用程序被终止,您还将收到一个回调给您的应用程序委托的确完成启动方法。

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

我也非常确定在这种情况下回调将包含一个标志,通知您它是由于位置更新而启动的。

我不认为你可以从iOS中的封闭应用程序中做任何事情。 您可以从后台(非活动状态)执行非常有限的事情,但我不知道您可以从已关闭的应用程序中执行任何操作。 我还没看到应用程序在不运行的情况下可以做什么;-)。