2010-04-02 74 views
2

我有几个关于核心位置的问题。核心位置 - 回退,位置缓存和替代方案

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

2)我可以在下次缓存设备的位置吗? Core Location是否自己做这件事?

3)我真的需要在春季的季节在用户区域的日落时间,我有一个功能来做到这一点,一旦我有设备的经度和纬度。也许我可以根据Locale对时间做一个假设? (例如:在美国,大约承担下午7:00)。

编辑:

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

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

回答

1

1)严格来说,如果用户没有或允许使用CoreLocation,如果允许给予,但CoreLocation不可用,也没有其他的后备来获取用户的位置作为纬度,经度对。使用语言环境可能无法在所有情况下使用。首先,它会给你一个近似值,可能离现实太远了。但是,您需要判断这个近似值对于您的应用程序是否正常。此外,还有一些用户使用与他们国家不同的地区。而且,您无法保证出国旅行的人每次都会调整日期/时间。

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

3)我会建议尝试使用核心位置,并在出现问题的情况下,只需要求用户输入他/她的当地时间或地点(该城市应足以满足您的需求)。如果您选择询问用户的位置,则可以获取相应的经纬度对,但这需要工作的网络连接。

0

2)从CLLocationManager在线文档:

位置服务尽快返回初始位置,可返回缓存的信息时。

您可以检查CLLocation时间戳以查看它是否是缓存值。 3)如果您决定使用区域设置作为初始TZ近似值,请记住用户旅行,并且可能不会立即重置其区域设置。你可以得到与当前TZ对象:

[NSTimeZone localTimeZone]