是否可以在应用程序关闭时为其添加位置感知?
例如,我想创建一个接近服务,该服务在我的应用程序关闭时工作,并在用户到达某个区域时向用户推送本地通知。
我读到,使用 CLRegion 我可以达到类似的结果,但只有在应用程序处于活动状态(或在后台)时。
我需要类似于由用户位置激活的远程通知服务。但这听起来真的很奇怪。是否有可能在 iOS 中提供类似的服务?
是否可以在应用程序关闭时为其添加位置感知?
例如,我想创建一个接近服务,该服务在我的应用程序关闭时工作,并在用户到达某个区域时向用户推送本地通知。
我读到,使用 CLRegion 我可以达到类似的结果,但只有在应用程序处于活动状态(或在后台)时。
我需要类似于由用户位置激活的远程通知服务。但这听起来真的很奇怪。是否有可能在 iOS 中提供类似的服务?
我相信您可以使用重要更改 API 来唤醒已被系统关闭(或崩溃)的应用程序。但是您仍然应该查看区域监控,因为它可能更接近您真正想要的。
和相关部分:
如果应用程序在发生更新时被挂起,系统会在后台将其唤醒以处理更新。如果应用程序启动此服务然后终止,系统会在新位置可用时自动重新启动应用程序。此服务在 iOS 4 及更高版本中可用,并且仅在包含蜂窝无线电的设备上可用。
当您设置 CLLocationManager 时,只需调用
- (void)startMonitoringSignificantLocationChanges
并以典型方式处理任何事件作为委托回调
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
请注意,如果应用程序被终止,您还将收到对您的应用程序委托完成启动方法的回调。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
我也很确定,在这种情况下,回调将包含一个标志,通知您它是由于位置更新而启动的。
有2个选项:
一是上面John提到的重大位置变更服务。另一个是startRegionMonitoring
两者都包含在Apple的位置感知文档中
两者都可以在短时间内打开已终止(关闭)的应用程序,并且您可以发送本地推送通知以提醒用户。应用程序无法进入正常状态,但如果用户单击通知,应用程序将打开,因此您可以实现目标。
这是在 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];
}
}
我认为您无法从 iOS 中的封闭应用程序中执行任何操作。您可以从后台(非活动状态)做非常有限的事情,但我不知道您可以从关闭的应用程序中做任何事情。我真的不知道应用程序在不运行时可以做什么;-)。