没用的玩具:在安卓设备上查看来自卫星授时的结果

145 天前
 coolfan

之前一直好奇设备和设备之间的时间是怎么同步的,查了一些资料后发现只是几个简单的网络请求就可以了。

意外想起来 GPS 接收器会涉及到高精度的时间用来产生位置信息。手边的手机不就是一个 GPS 接收器吗?

查了一些资料,发现安卓允许应用访问 GNSS (泛指所有的卫星导航系统,GPS 、北斗、伽利略等)的原始测量值,这是不是就可能可以用手机展示来自卫星的授时结果了。

TimeIs

介绍

仅支持 Android 。

由 Flutter 编写的一个简单的显示当前时间和日期的应用。时间是从 GNSS 服务获取,来自于卫星数据。

当前时间

实时显示当前时间。

上次获取到的世界协调时

来自卫星的数据是不连续的,此处展示的是上次获取的时间转换为世界协调时间的结果。

⚠️注意⚠️

坦率地说,这个东西没有什么用,因为它得到的时间在不同设备上总是有几十毫秒的偏差,我也不知道为什么。🤣如果你能接收这个级别的误差,我想它是为数不多的能够提供卫星授时的程序。

https://github.com/Coooolfan/TimeIs

也可以直接从 https://github.com/Coooolfan/TimeIs/releases/tag/v0.1.0-beta 下载打包好的 apk 程序

2242 次点击
所在节点    分享创造
12 条回复
yyzh
145 天前
额.手机不是都从基站接收的时间数据么?
Greatshu
145 天前
cellular-z 可以查看 NMEA 日志
hhacker
145 天前
卫星是原子钟时间, 你手机收到数据的时候, 时间已经过去了
xinyana
145 天前
你别说你做的这小玩意儿还挺有意思
wy315700
145 天前
卫星授时我记得不能直接用卫星发送的时间

而是要扣掉卫星到设备的距离传输的时间
wy315700
145 天前
GPS 轨道高度 20183km 左右,算算电磁波传输的速度,刚好是几十 ms 的偏差
coolfan
145 天前
@yyzh 现在的手机基本都是从基站和网络。其实基站还能提供卫星的星历,加快搜星和定位
winglight2016
145 天前
几十毫秒的偏差——这就是 GPS 定位原理呀,三个卫星到你手机的时差可以算出卫星和你的距离,然后就能定位经纬度了,甚至包括海拔。
coolfan
145 天前
@hhacker
@wy315700 #5
其实开发文档里直接给了计算公式。https://developer.android.com/reference/android/location/GnssClock?hl=en#getFullBiasNanos()
这个值不是卫星直接的时间戳,也是经过 GPS 芯片处理后的值😗我想这种误差应该已经被纠正了吧
coolfan
145 天前
fugu37
145 天前
不清楚 Android 如何处理 GNSS ,只说 GNSS 模块。

GNSS 模块本身需要接受到多颗卫星信号 + 一定时间解算才能得到准确的时间,手机上 GNSS 很少长时间开启。

另一方面,GNSS 的模块输出分为两部分:1. 串口输出 NMEA 数据 2. GPIO 引脚输出 1pps 数据。只有后者是准确的时间,前者的准确度未必比得上 NTP 。
Tsing2
144 天前
你要说没用吧,理论确实,GPS 不太可靠,我还记得 20 年前 GPS 发生过一次授时错误,造成全球 CDMA 网络(包括当时的中国电信)瘫痪的事故,相比之下,随便哪个 NTP 都要比这靠谱。
但这个确实好玩,哈哈哈哈,极客追求的都是这种没啥用但具有成就感的东西,记得《生活大爆炸》里有个桥段,极客男主们通过网络遥控电器,Penny 来了句“你知道你们可以从 Radio Shack 买个通用遥控,那个非常便宜”。极客们的浪漫,麻瓜们很难懂的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1060703

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX