3

在 Android 开发(最新 SDK)中,我使用GpsStatus.NmeaListener来解析 NMEA 消息以进行时间同步。

onNmeaReceived(long timestamp, String nmea)回调中,我解析 GPRMC 消息的 nmea 字符串。然后我计算系统时钟和从 GPRMC 消息解析的时间之间的偏移量。

现在,在 Android Frame 工作中收到 NMEA 消息的时刻与处理回调之间存在延迟。这会导致我正在计算的实际偏移量发生变化。

我的猜测是,timestamp沿着 NMEA 消息发送的是收到 NMEA 消息那一刻的系统时钟时间。如果这是真的,我可以使用这个时间戳来补偿回调处理中的延迟。

根据我的测量,timestamp时间与回调中捕获的系统时钟时间onNmeaReceived有大约 10 ~ 30 毫秒的差异。
时间和从解析的 GPRMC 消息导出的时间之间的时间差/偏移量timestamp为 7200092 毫秒(GPS 和系统时间之间的时间差为 2 小时)。

因此,我会说这timestamp不是基于 GPS 的时间,而是收到消息时的系统时钟时间。

我已经在网上搜索了很多,但似乎找不到有关此时间戳的任何信息。有没有人有资源可以告诉我们更多关于这个时间戳的信息?这个时间戳到底代表什么?它是在什么时间记录的?

4

1 回答 1

2

感谢 Hanno Binder 的评论,我得到了以下答案。

NMEA 回调在:Android Location Engine 源代码中进行了描述。这里它声明当 android 框架处理从位置引擎(GL 引擎)接收到的事件时,会记录回调中的timestamponNmeaReceived(long timestamp, String nmea)有关 Android GPS 架构的概述,请参阅:greatanjum 在 XDA 上对 GPS 架构的概述

使用 gettimeofday() 方法将其记录为(在 sys/time.h> 中指定)timestampstruct timeval

在十个 Nexus 7 (2012) 设备上测量 200 个偏移量timestamp和 GPRMC 时间之间的标准偏差,导致记录的偏移量的平均标准偏差为 6.95 毫秒。

于 2015-07-20T17:23:55.683 回答