当应用程序关闭时,可以将位置感知添加到应用程序中?停用的iOS应用程序上的地理位置
例如,我想创建一个接近服务,当我的应用程序关闭时将其工作,并在到达某个区域时向用户推送本地通知。
我读了CLRegion我可以达到类似的结果,但只有当应用程序处于活动状态(或在后台)。
我需要类似于由用户位置激活的远程通知服务。但这听起来很奇怪。 iOS中可能有类似的服务吗?
当应用程序关闭时,可以将位置感知添加到应用程序中?停用的iOS应用程序上的地理位置
例如,我想创建一个接近服务,当我的应用程序关闭时将其工作,并在到达某个区域时向用户推送本地通知。
我读了CLRegion我可以达到类似的结果,但只有当应用程序处于活动状态(或在后台)。
我需要类似于由用户位置激活的远程通知服务。但这听起来很奇怪。 iOS中可能有类似的服务吗?
有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];
}
}
我不认为你可以从iOS中的封闭应用程序做任何事情。您可以从后台(非活动状态)执行数量非常有限的操作,但我不知道您可以从已关闭的应用程序中执行任何操作。我真的不知道应用程序可以在不运行的情况下执行什么操作;-)。
我希望在基于位置服务的某种远程推送通知(我知道...这听起来非常奇怪:P) – MatterGoal 2012-07-30 20:48:08
不奇怪,仅仅是不可能的。每个人都会喜欢做你正在谈论的事情,但是在我们有生之年不会发生在苹果产品上。抱歉。 – HackyStack 2012-07-30 20:56:04
我相信你可以使用SignificantChange API来唤醒已被系统关闭的应用程序(或崩溃)。但你仍应该关注区域监测,因为它可能更接近你真正想要的。
和相关部分:
如果出现更新时应用程序被暂停,系统唤醒它在后台处理更新。如果应用程序启动此服务,然后终止,系统会在新位置可用时自动重新启动应用程序。此服务在iOS 4及更高版本中可用,并且仅在包含蜂窝无线电的设备上可用。
当您设置CLLocationManager就叫
- (void)startMonitoringSignificantLocationChanges
和处理的典型方式的任何事件作为一个代表回调
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
注意,如果应用程序被终止,您也会收到回复您的应用程序委托完成启动的方法。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
我也敢肯定,在这种情况下,回调将包括一个标志,通知你,它推出的位置更新的结果。
你确定“终止”状态吗?我的意思是,在文档中,我只能找到对“暂停”状态的引用(这并不意味着“关闭”的应用程序。你能添加一个链接吗? – MatterGoal 2012-07-31 07:20:39
是的。事实上,我已经测试了两个。在我看来,startMonitoringSignificantLocationChanges是更好的,因为它没有区域监控选项的限制(在iOS中共享位置,但您可以监控的区域中有一个未知但可用的最大限制。) – Lefteris 2012-07-31 12:35:45
似乎iOS 7.0有一个错误,它是在iOS 7.1上解决http://www.macrumors.com/2014/02/11/ios-71-fixes-location-apps/ – 2014-03-26 23:29:55