【问题标题】:Android onLocationchanged does not give correct timeAndroid onLocationchanged 没有给出正确的时间
【发布时间】:2014-04-24 11:34:13
【问题描述】:

我正在使用 Google Play 服务来获取设备的当前位置。每当有新位置时,都会调用我的 onLocationChanged()。

我从 onLocationChanged() 中的 Location 对象获取纬度和经度。这些值是正确的。但是我得到的时间不正确。它给了我系统时间,这是我故意改变的。

那么有什么方法可以让我得到正确的时间。如果用户出于任何原因更改了设备时间,我想要一种方法来获取正确的时间。

我也检查了 NITZ/NTP 线程,但没有帮助。如果我使用 SNTPClient,它会给我一个正确的时间,但它会产生对互联网连接的依赖。

我已尝试从 GPS 和网络提供商处获取位置信息。在这两种情况下,位置都是正确的,但时间是从系统中挑选出来的。我已取消选中手机上的“自动时间同步”。

【问题讨论】:

  • 您手动更改时间,拒绝自动同步,还想要正确的时间?...
  • 是的。其实我想要一个防篡改的解决方案。因此,如果用户取消选中自动同步并更改了时间,后端应该仍然获得“真实”时间,而不是被篡改的时间。

标签: android google-play-services locationmanager ntp


【解决方案1】:

试试 Location.getTime()。 它将返回此修复的 UTC 时间,以 1970 年 1 月 1 日以来的毫秒数为单位。

请注意,设备上的 UTC 时间不是单调的:它可以不可预测地向前或向后跳跃。所以在计算时间增量时总是使用 getElapsedRealtimeNanos。 另一方面,getTime 可用于向用户呈现人类可读的时间,或者用于仔细比较重新启动或跨设备的位置修复。 LocationManager 生成的所有位置都保证具有有效的 UTC 时间,但请记住,系统时间可能在位置生成后已更改。

【讨论】:

  • 安德烈,我只使用 Location.getTime()。它给出了不正确的时间值。它选择设备时间,而不是从 GPS 或网络运营商处接收到的时间。
【解决方案2】:

location.getTime() 为您提供上次更新的纬度/经度值距离 1.1.1970 的时间(以毫秒为单位)。

14584084左右

【讨论】:

    猜你喜欢
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多