我对Core Location有几个问题。
1)如果用户拒绝我的应用程序使用核心位置的权限,或核心位置由于某种原因不可用,是否有回退? (例如,设备区域设置?)
2)我可以在下次缓存设备的位置吗?核心位置本身就是这样做的吗?
3)我真的需要在春季中期在用户区域的日落时间,并且我有一个功能,一旦我有设备的纬度和经度。也许我可以根据Locale做出关于时间的假设? (例如:在美国,假设大约晚上7点。)
编辑:
我真的想在应用的用户区域计算日落。与地图无关。我正在考虑以下一系列事件:
答案 0 :(得分:1)
1)严格地说,如果用户不允许使用CoreLocation,或者如果给出了权限但CoreLocation不可用,则没有其他后备可以将用户的位置作为纬度,经度对。使用区域设置可能不适用于所有情况。首先,它只会给你一个与现实相差太远的近似值。但是,您可以自行判断此近似值是否适合您的应用。此外,有些用户使用的区域设置与其国家/地区不同。而且,您无法保证出国旅行的人每次都会调整日期/时间。
2)核心位置默认缓存从GPS单元检索的最后位置。但是,对于出国旅行的人来说,这个缓存的位置肯定是错误的(即使对于几英里外的人来说也是如此),一般情况下,您应该丢弃缓存的值并每次再次对用户进行本地化。我理解,对于在国内旅行的人来说,这通常不会产生巨大的问题。但这取决于国家:在意大利旅行不会改变时间,但在美国旅行可能会将时间改为3小时。
3)我建议尝试使用核心位置,如果出现问题,只需要求用户输入他/她的当地时间或地点(城市应该足够您的目的)。如果您选择询问用户的位置,则可以获得相应的纬度/经度对,但这需要有效的网络连接。
答案 1 :(得分:0)
2)来自CLLocationManager的在线文档:
位置服务尽快返回初始位置,并在可用时返回缓存信息。
您可以检查CLLocation时间戳以查看它是否为缓存值。
3)如果您决定使用区域设置进行初始TZ近似,请记住用户旅行,并且可能不会立即重置其区域设置。您可以使用以下命令获取当前TZ对象:
[NSTimeZone localTimeZone]