我创建了一个使用iPhone上的位置服务的小应用程序。一切都运作良好,除了事实,有时,即使我明确杀死应用程序,信息栏中的小箭头仍保持活动状态。
我使用了locationservices的后台模式,因此实现了appDelegate方法applicationWillResignActive
,applicationDidEnterBackground
,applicationWillEnterForeground
和applicationDidBecomeActive
,但是没有触及位置服务(嗯 - 我需要它们在后台模式)。
在该配置中,永远不会调用applicationWillTerminate
;我在stopUpdatingLocation
中将所有清理清理实现为dealloc
,因为我找不到任何其他适合此位置的地方。但仍然 - 指标仍然存在。
有什么想法吗?
答案 0 :(得分:13)
我遇到了同样的问题 - 应用程序将位置指示器保留在状态栏中。
我的问题原来是我最初调用了CCLocationManager的'startMonitoringSignificantLocationChanges'方法,这种方法可以提供粗略的位置信息,以便在我真正需要时提高分辨率。
不幸的是,一旦应用程序调用该方法一次,即使您随后删除该应用程序并重新安装它,它也将始终在状态栏中重新显示该图标,直到该应用程序在CCLocationManager上调用“stopMonitoringSignificantLocationChanges”以取消注册自身系统 - 完全痛苦,因为我必须保留该代码,直到它将自己整理出几个为我测试我的应用程序的人。
因此,如果您的应用已停止显示该图标,请确保您已通过停止呼叫匹配对“startMonitoringSignificantLocationChanges”的任何调用。
答案 1 :(得分:3)
如果您使用
开始了您的位置管理员工作[MyLocationManagerInstance startMonitoringForSignificantLocationChanges];
然后你需要用:
来阻止它[MyLocationManagerInstance stopMonitoringForSignificantLocationChanges];
如果强制终止应用程序,则不会调用applicationWillTerminate,因为从操作系统的角度来看,它显示为SIGKILL。
答案 2 :(得分:1)
我遇到了类似的问题。问题只发生在iPhone4上,但在我的3GS上运行完美。在查看我的代码之后,我发现在我的startUpdatingLocation方法中我使用了startUpdatingLocation和startMonitoringForRegion服务,但是,在我的stopUpdatingLocation方法中,我只是停止更新LocationLocation服务。我也通过关闭MonitoringForRegion解决了这个问题。
#pragma mark -
#pragma mark Location methods
- (void)startUpdatingLocation
{
[self.locationManager startUpdatingLocation];
[self.locationManager startMonitoringForRegion:desRegion desiredAccuracy:50.0f];
}
- (void)stopUpdatingLocation
{
[self.locationManager stopUpdatingLocation];
// !!!: fix location service indicator stuck issue
[self.locationManager stopMonitoringForRegion:desRegion];
}
答案 3 :(得分:0)
好的,问题解决了。指示灯将保持亮起,直到找到新位置。然后,如果其他一切都正确,指示灯将熄灭。