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

219 天前
coolfan  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 程序

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

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

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

另一方面,GNSS 的模块输出分为两部分:1. 串口输出 NMEA 数据 2. GPIO 引脚输出 1pps 数据。只有后者是准确的时间,前者的准确度未必比得上 NTP 。
Tsing2
218 天前
你要说没用吧,理论确实,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