2014-01-12 51 views
3

我的CLLocationManager在用户第一次进入应用程序时启动。我正在初始化它:ios7中的CLLocationManager停止工作

​​

而我正在使用geofencing。

我在我的.plist中定义了required background modes

如果我在模拟器中使用gpx文件测试应用程序,它工作正常。到现在为止还挺好。

不过,我在这两个环节上写着:

Start Location Manager in iOS 7 from background task

Background Location Services not working in iOS 7

,在iOS7,当位置没有几分钟的改变则CLLocation进入睡眠状态。

我的问题是:

我不叫didUpdateLocation可言,我只希望didEnterRegion,或didExitRegion。从理论上讲,它会工作吗,甚至应用程序被杀或用户位置在最后一小时没有改变,然后决定移动?

+1

如果应用程序被用户明确地杀害,iOS7下,你不会得到任何更新。对此无能为力。 – danielbeard

+0

看看这个SO帖子:http://stackoverflow.com/questions/18639976/significant-blocation-change-event-in-ios7-background-service-call –

+0

@danielbeard如何说:“如果应用程序被杀害明确地由用户在iOS7下,你将不会得到任何更新“!!!您可以使用Apple的基于位置的提醒来检查此行为:如果您杀死“剩余”应用程序 - 您将不会收到关于位置进入/退出的通知! – TonyMkenu

回答

2

有你的问题的几个要素:

1-为了不老调重弹的是在前面的回答,我想先看看我的这个链接的答案。它将帮助,如果用户停止移动您解决围绕核心位置更新停止和如何修改这种行为:如果用户杀死iOS7的应用程序(在应用切换器弹它) iOS7 Core Location not updating

2- ,该应用程序将不会重新启动,因此在手机重新启动后,您的位置更新和区域监控都不会重新启动。另一方面,如果应用程序因内存压力而死亡,则iOS将重新启动应用程序,并在后台重新启动位置更新和区域监视。另外,如果您重新启动手机,地区监控将自动重启。你显然必须启用背景模式。

3-现在你正在谈论你的问题中的区域,所以我假设你已经实现了CLCircularRegion。如果不是,那应该是第一步,然后是“startMonitoringForRegion”。就你而言,即使用户已停止移动一段时间然后开始移动,应用程序将在应用程序进入或退出区域时被唤醒/委托。

4-确保使用locationManager:didDetermineState:forRegion:以及。这将允许应用程序在开始时确定其位于区域内还是区域外。当您想到应用程序正在启动并且没有发生区域交叉时,这很有用,但了解用户位于区域内还是区域外很重要。

希望这有助于

+0

感谢您的答案。我已经实施了其中大部分。只是一个关于2的问题 - 当用户杀死应用程序时,区域监控停止工作?所以,即使他进入该地区/离开它,如果该应用程序被用户杀害,那么代理不会被调用,对吧? – ghostrider

+0

这是正确的。这是为了保护用户。苹果希望用户始终保持控制。因此,如果用户表示他/她不希望应用程序在后台运行(即,用户关闭应用程序),那么它被杀害,而不是重新启动(及其周边地区的监控是不是重新启动)。 – Spectravideo328