2

是否可以在应用程序关闭时为其添加位置感知?

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

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

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

4

3 回答 3

2

我相信您可以使用重要更改 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

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

于 2012-07-30T21:55:50.070 回答
2

有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];

    }
}
于 2012-07-30T22:07:56.937 回答
0

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

于 2012-07-30T20:30:38.723 回答