之前一直好奇设备和设备之间的时间是怎么同步的,查了一些资料后发现只是几个简单的网络请求就可以了。
意外想起来 GPS 接收器会涉及到高精度的时间用来产生位置信息。手边的手机不就是一个 GPS 接收器吗?
查了一些资料,发现安卓允许应用访问 GNSS (泛指所有的卫星导航系统,GPS 、北斗、伽利略等)的原始测量值,这是不是就可能可以用手机展示来自卫星的授时结果了。
仅支持 Android 。
由 Flutter 编写的一个简单的显示当前时间和日期的应用。时间是从 GNSS 服务获取,来自于卫星数据。
实时显示当前时间。
来自卫星的数据是不连续的,此处展示的是上次获取的时间转换为世界协调时间的结果。
坦率地说,这个东西没有什么用,因为它得到的时间在不同设备上总是有几十毫秒的偏差,我也不知道为什么。🤣如果你能接收这个级别的误差,我想它是为数不多的能够提供卫星授时的程序。
https://github.com/Coooolfan/TimeIs
也可以直接从 https://github.com/Coooolfan/TimeIs/releases/tag/v0.1.0-beta 下载打包好的 apk 程序
1
yyzh 148 天前 via Android
额.手机不是都从基站接收的时间数据么?
|
2
Greatshu 148 天前
cellular-z 可以查看 NMEA 日志
|
3
hhacker 148 天前
卫星是原子钟时间, 你手机收到数据的时候, 时间已经过去了
|
4
xinyana 148 天前 via Android
你别说你做的这小玩意儿还挺有意思
|
5
wy315700 148 天前 via Android
卫星授时我记得不能直接用卫星发送的时间
而是要扣掉卫星到设备的距离传输的时间 |
6
wy315700 148 天前 via Android
GPS 轨道高度 20183km 左右,算算电磁波传输的速度,刚好是几十 ms 的偏差
|
8
winglight2016 148 天前
几十毫秒的偏差——这就是 GPS 定位原理呀,三个卫星到你手机的时差可以算出卫星和你的距离,然后就能定位经纬度了,甚至包括海拔。
|
9
coolfan OP @hhacker
@wy315700 #5 其实开发文档里直接给了计算公式。https://developer.android.com/reference/android/location/GnssClock?hl=en#getFullBiasNanos() 这个值不是卫星直接的时间戳,也是经过 GPS 芯片处理后的值😗我想这种误差应该已经被纠正了吧 |
11
fugu37 148 天前 1
不清楚 Android 如何处理 GNSS ,只说 GNSS 模块。
GNSS 模块本身需要接受到多颗卫星信号 + 一定时间解算才能得到准确的时间,手机上 GNSS 很少长时间开启。 另一方面,GNSS 的模块输出分为两部分:1. 串口输出 NMEA 数据 2. GPIO 引脚输出 1pps 数据。只有后者是准确的时间,前者的准确度未必比得上 NTP 。 |
12
Tsing2 148 天前 2
你要说没用吧,理论确实,GPS 不太可靠,我还记得 20 年前 GPS 发生过一次授时错误,造成全球 CDMA 网络(包括当时的中国电信)瘫痪的事故,相比之下,随便哪个 NTP 都要比这靠谱。
但这个确实好玩,哈哈哈哈,极客追求的都是这种没啥用但具有成就感的东西,记得《生活大爆炸》里有个桥段,极客男主们通过网络遥控电器,Penny 来了句“你知道你们可以从 Radio Shack 买个通用遥控,那个非常便宜”。极客们的浪漫,麻瓜们很难懂的 |