【问题标题】:What determines the presence of the iPhone Location Services icon in the status bar?是什么决定了状态栏中 iPhone 定位服务图标的存在?
【发布时间】:2011-05-23 18:33:39
【问题描述】:

这是我的情况。我正在开发一个使用核心位置来确定设备位置的 iPhone 应用程序。有一个图标:位置服务图标,出现在设备的状态栏中。我知道该图标的目的是告诉用户定位服务当前正在被某物使用。对于有洞察力的用户来说,这意味着电池寿命缩短。因此,我想确保仅在我的应用实际使用位置服务时才显示该图标。

输入混乱。作为开发者,我们不能通过官方 SDK 访问状态栏。这意味着操作系统将根据应用程序的行为自动显示该图标。尽我所能,我找不到一个明确的定义究竟是什么导致该图标出现。

就目前而言,该图标会在我的应用代理获得控制权之前出现,并且只要应用已安装、运行与否就会保持可见。这显然是最坏的情况,这让我怀疑我对CLLocationManager 的使用。我会详细说明我的使用,但作为一个极端情况,我尝试删除 CoreLocation 框架(以及我怀疑也使用 CoreLocation 的 MapKit 框架)以及与位置相关的所有代码。该应用程序仍然导致图标出现并一直存在,直到我删除该应用程序。然后我制作了一个全新的应用程序,除了更改应用程序标识符以匹配我的应用程序的标识符外,没有进行任何更改。图标仍然出现。我更改了标识符以使用我的一个未使用位置的应用程序的标识符,并且图标没有出现。我确实确保在此测试期间重置设备。

这个问题真的要死我了。我无法想象应用程序 ID 与位置服务图标有什么关系,但我看不出它持续存在的其他原因。这似乎是一个隐藏真正问题的红鲱鱼,但我对真正的问题不知所措。

【问题讨论】:

  • 您是在应用启动后立即开始位置更新,还是之后的某个时间(例如按下按钮后)?
  • 我在 applicationDidBecomeActive: 委托方法中启动它们。因此,只要应用启动。
  • 查看我编辑的答案。不幸的是,您在图标未显示方面很不走运,但这并不一定意味着电池正在以更高的速度耗尽。
  • 是的,我已经读到图标的存在实际上并不意味着位置服务正在积极运行,我相信我对 CLLocationManager 的简单使用是正确的。撇开电池寿命不谈,对用户来说,这仍然是一种不幸和令人沮丧的误解。

标签: iphone objective-c core-location


【解决方案1】:

这是我经过一番摆弄后得出的更新和解决方案。由于我的问题显然是操作系统在我的应用程序 ID 和定位服务图标之间建立了某种联系,因此我尝试重置设备的位置警告,我最初并不知道我可以这样做。对于好奇的人,这可以通过设置应用程序来完成,然后是常规 > 重置 > 重置位置警告。在进行此重置并重新安装应用程序后,它再次请求使用定位服务。现在,图标正好出现在startUpdatingLocation 上,而恰好在stopUpdatingLocation 上消失,完全符合我的初衷。

我不知道最初是什么导致了这种情况,而且我毫不怀疑这种情况本身就是一个操作系统错误,正如 Matthew Frederick 所指出的那样,但至少在我的情况下,这种情况是可以治愈的。

【讨论】:

  • 啊,忘了在我的回答中提到这一点:对于某些重置警告将解决问题,但并不适合所有人。不知道为什么,但我知道我的运行 OS 4.0 的 iPhone 3GS 需要彻底擦除设备才能解决这个问题,我无法向我的客户建议。不过,很高兴它为您解决了问题!
  • 感谢您发布这一切。我刚刚在我的应用中发现了类似的行为。
【解决方案2】:

存在导致此问题的已知错误。几个月前我向苹果公司报告了这件事,并被告知这是一个已知问题的骗局。不幸的是,它似乎没有被修复。

我第一次发现它是在我看到符号出现时(并且我的应用在设置应用中显示为有权使用位置信息),只需安装我的应用不再安装应用程序的设备,甚至没有运行它。

无论出于何种原因,设备都会保留对曾经获得位置服务许可的应用的引用。

更糟糕的是,如果应用程序在过去确实获得了许可,然后被卸载,然后安装了更新版本的应用程序,不仅会出现图标,而且升级后的应用程序实际上不再接收位置信息 因为该应用程序永远不会向操作系统请求位置许可。它实际上被永久拒绝了。

让我和我的少数用户感到非常沮丧。

【讨论】:

  • 确实,我看到了类似的行为。似乎只需安装任何具有相同应用程序标识符的应用程序就足以使图标出现。感谢您的信息。
  • 查看我对自己问题的回答。我现在相信,您的少数沮丧的用户可以按照我解决问题的相同步骤来解决他们的问题。
  • 是否有可能提供已知问题的链接或错误 ID?
  • @Roger - 来自通知我被骗的电子邮件:“这是 Bug ID# XXXXXXX 的后续行动。经过进一步调查,已确定这是一个已知问题,目前正在工程调查。此问题已在原始错误 ID#8364797 下归档在我们的错误数据库中。用于跟踪此重复问题的原始错误编号可以在状态列中找到,格式为:Duplicate/OrigBug#。 (我删除了我的错误编号以避免将来混淆;任何提交的人都应该参考原件。)
【解决方案3】:

您还没有在应用的 .plist 的 UIBackgroundModes 键中启用位置选项,是吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    • 2016-05-30
    相关资源
    最近更新 更多