【问题标题】:Core Location - fallback, location caching and alternatives核心位置 - 后备、位置缓存和替代方案
【发布时间】:2012-10-01 21:21:47
【问题描述】:

我有几个关于核心位置的问题。

1) 如果用户拒绝我的应用使用核心位置的权限,或者核心位置由于某种原因不可用,是否有回退? (例如设备区域设置?)

2)我可以缓存设备的位置以备下次使用吗? Core Location 自己会这样做吗?

3)我真的需要在春季中期用户区域的日落时间,一旦我有了设备的纬度和经度,我就有一个功能可以做到这一点。也许我可以根据语言环境对时间做出一个假设? (例如:在美国,假设大约晚上 7:00。)

编辑:

我真的想计算应用程序用户区的日落时间。与地图无关。我正在考虑以下一系列事件:

  • 检查核心位置的可用性。如果是,请使用它并将其存储在 NSUserPreferences 中。如果核心位置不可用,请继续使用后备。
  • 检查存储的位置。如果已存储,请使用它。如果没有,请继续...
  • 检查用户选择的时间。

【问题讨论】:

    标签: iphone core-location ipod


    【解决方案1】:

    1) 严格来说,如果用户不允许使用 CoreLocation,或者如果已授予权限但 CoreLocation 不可用,则没有其他后备方法可以将用户的位置作为纬度、经度对。使用区域设置可能不适用于所有情况。首先,它只会给你一个可能离现实太远的近似值。但是,您可以自行判断此近似值是否适合您的应用程序。此外,有些用户使用的区域设置与其所在国家/地区不同。而且,您无法保证出国旅行的人每次都会调整日期/时间。

    2) 默认情况下,核心位置缓存从 GPS 单元检索到的最后一个位置。但是,对于出国旅行的人来说,这个缓存的位置肯定是错误的(即使对于仅在几英里外旅行的人),通常,您应该丢弃缓存的值并每次重新定位用户。我知道对于在本国旅行的人来说,这(通常)不会造成大问题。但这取决于国家:在意大利境内旅行不会改变时间,但在美国旅行可能会改变时间长达 3 小时。

    3) 我建议尝试使用核心位置,如果出现问题,只需让用户输入他/她的当地时间或位置(城市应该足以满足您的目的)。如果您选择询问用户的位置,那么您可以获得相应的纬度/经度对,但这需要有效的网络连接。

    【讨论】:

      【解决方案2】:

      2) 来自 CLLocationManager 的在线文档:

      定位服务尽快返回初始位置,并在可用时返回缓存信息。

      您可以检查 CLLocation 时间戳以查看它是否为缓存值。

      3) 如果您决定使用区域设置进行初始 TZ 近似,请记住用户旅行,并且可能不会立即重置他们的区域设置。您可以通过以下方式获取当前 TZ 对象:

      [NSTimeZone localTimeZone]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多