这是我的情况。我正在开发一个使用Core Location来确定设备位置的iPhone应用程序。有一个图标:位置服务图标,显示在设备的状态栏中。我知道该图标的目的是告诉用户当前正在使用位置服务。对于敏锐的用户,这意味着电池寿命缩短。出于这个原因,我想确保只有当我的应用程序实际使用位置服务时才会显示图标。
输入混乱。作为开发人员,我们无法通过官方SDK访问状态栏。这意味着操作系统将根据应用程序的行为自动显示该图标。尽我所能,我找不到明确定义该图标显示的原因。
目前,图标出现在我的应用委托代理人获得控制权之前,只要应用程序已安装,正在运行或不运行,该图标就会保持可见状态。这显然是最糟糕的情况,它让我怀疑我对CLLocationManager
的使用。我会详细说明我的用法,但作为极端情况,我尝试删除CoreLocation框架(以及MapKit框架,我怀疑它也使用CoreLocation),以及与位置相关的所有代码。在我删除应用程序之前,应用程序仍会显示图标并保持不变。然后,我创建了一个全新的应用程序,除了更改应用程序标识符以匹配我的应用程序的标识符之外,不做任何更改。图标仍然出现。我更改了标识符以使用我的一个不使用位置的应用程序的标识符,并且没有显示图标。我确实在测试期间确保重置设备。
这个问题真的让我很伤心。我无法想象应用程序ID与位置服务图标有什么关系,但我认为其持久性没有其他原因。它似乎是一个隐藏真正问题的红鲱鱼,但我对真正的问题感到茫然。
答案 0 :(得分:22)
这是一个更新和解决方案,我在一些摆弄之后来到了。由于我的问题显然是操作系统在我的应用程序的ID和位置服务图标之间建立了一些连接的问题,我尝试重置设备的位置警告,我原本不知道我能做什么。对于好奇,这可以通过设置应用程序完成,然后通用>重置>重置位置警告。重置并重新安装应用程序后,它再次请求使用位置服务。现在,图标正好显示在startUpdatingLocation
上,并且正好在stopUpdatingLocation
上消失,正如我原先预期的那样。
我不知道最初导致这种情况的原因,我毫不怀疑这种情况本身就是一个操作系统错误,正如马修弗雷德里克所指出的那样,但至少在我的情况下,条件是可以治愈的。
答案 1 :(得分:5)
有一个已知的错误导致了这个问题。几个月前我向苹果公司报告过,并被告知这是一个已知问题的骗局。不幸的是,似乎没有修复。
当我看到符号出现时(我的应用显示有权使用“设置”应用中的位置信息),我首先发现它只需 安装 我的应用一个不再安装应用程序的设备,甚至没有运行它。
无论出于何种原因,设备都会在获得位置服务许可后保留对应用的引用。
更糟糕的是,如果该应用实际上已获得过去的许可,则会被卸载,然后会安装该应用的更新版本,不仅会显示该图标,而且已升级的应用不再实际接收位置信息因为应用程序永远不会向操作系统询问位置权限。它实际上被永久否定了。
对我和少数用户来说非常令人沮丧。
答案 2 :(得分:1)
您还没有在应用的.plist的UIBackgroundModes键中启用位置选项,对吗?