如何判断CLLocationManager是否正在监控重要的位置更改

时间:2015-02-17 23:11:21

标签: mapkit core-location cllocationmanager

我正在更新一个应用程序,该应用程序使用CLLocationManager监视用户位置的重大更改。我允许用户打开或关闭此选项,适当地设置startMonitoringSignificantLocationChanges和stopMonitoringSignificantLocationChanges。

问题是当用户重新打开应用程序时我需要知道应用程序当前是否正在监视重要位置,以便相应地设置此切换的当前状态。

我是否可以在CLLocationManager或其他地方检查,告诉我监控当前是打开还是关闭。

2 个答案:

答案 0 :(得分:1)

部分原因是由于CLLocationManager的这种令人讨厌的限制,我最终取消了使用重要位置变更来支持监控区域。这样做的优点是比单元塔更换时随机获取位置更准确,而不会大量耗尽电池,但更重要的是,您可以向位置管理员询问其当前正在监控的区域,从而找出是否它开启或关闭。

您可以使用它与重要位置更改的方式相同,因为您可以设置一个区域,在您当前位置周围的半径,然后在您的didExitRegion回调上,获取正确的GPS信号并使用那。

答案 1 :(得分:0)

在iOS 8中,您可以检查从用户获得的当前权限。如果用户授予您Always权限,则表示他们允许进行重大位置更改。如果他们只允许WhenInUse,则他们不允许进行重大的位置更改。有关两种位置权限的详细信息,请参阅this post

在iOS 8之前,我不相信有一种方法可以说明这一点。用户可以允许您使用他们的位置。因此,您需要自己跟踪位置管理器的当前状态(即BOOL中的NSUserDefaults在您致电YES时更改为startMonitoringSignificantLocationChanges,并设置当你致电NO时,它会stopMonitoringSignificantLocationChanges