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

时间:2012-07-30 20:24:45

标签: ios geolocation

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

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

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

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

有两个选项:

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

Location Awarness Documentation来自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];

    }
}

答案 2 :(得分:0)

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