2012-07-30 31 views
2

当应用程序关闭时,可以将位置感知添加到应用程序中?停用的iOS应用程序上的地理位置

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

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

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

回答

2

有2个选项:

其中一个是约翰在上面提到的重要位置变更服务。 另一种是startRegionMonitoring

两者都涵盖在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]; 

    } 
} 
+0

你确定“终止”状态吗?我的意思是,在文档中,我只能找到对“暂停”状态的引用(这并不意味着“关闭”的应用程序。你能添加一个链接吗? – MatterGoal 2012-07-31 07:20:39

+0

是的。事实上,我已经测试了两个。在我看来,startMonitoringSignificantLocationChanges是更好的,因为它没有区域监控选项的限制(在iOS中共享位置,但您可以监控的区域中有一个未知但可用的最大限制。) – Lefteris 2012-07-31 12:35:45

+2

似乎iOS 7.0有一个错误,它是在iOS 7.1上解决http://www.macrumors.com/2014/02/11/ios-71-fixes-location-apps/ – 2014-03-26 23:29:55

0

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

+0

我希望在基于位置服务的某种远程推送通知(我知道...这听起来非常奇怪:P) – MatterGoal 2012-07-30 20:48:08

+0

不奇怪,仅仅是不可能的。每个人都会喜欢做你正在谈论的事情,但是在我们有生之年不会发生在苹果产品上。抱歉。 – HackyStack 2012-07-30 20:56:04

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 

我也敢肯定,在这种情况下,回调将包括一个标志,通知你,它推出的位置更新的结果。

相关问题