如何使用 Android 获得最准确的时间?

2023-11-27

我真的不认为这个问题是重复的。
类似问题的大多数答案都说使用 System.currentTimeMillis() 作为最准确的时间,但我注意到并排的两个 Android 设备可能会彼此相差 5 秒或更长时间,或者(更重要的是)实时,我相信 currentTimeMillis() 将反映这种差异。

所以我真正寻找的是一个全面的解决方案来充分利用accurate给定时刻可能的时间。
例如,它会从 GPS 开始,如果 GPS 不可用或没有信号,则回退到 SNTP,或者如果不起作用,则要求 Android 通过自己的 SNTP 或运营商 NITZ 刷新其挂钟。

我的目标是 0.1 秒内准确。
那可能吗?
Thanks.


那可能吗?

这取决于你对“那个”的定义。

那么,让我们先检查一下其余的材料......

它将从 GPS 开始

GPS 时间并不是特别准确,具体取决于硬件。我想你还需要使用NmeaListener尝试直接从 NMEA 句子中解析时间数据,据我所知getTime() on Location是系统时间,而不是某些 GPS 时间。另外,请记住,GPS 访问并不通用(用户可能已专门禁用它,用户可能已将设备置于飞行模式,用户可能位于没有可用 GPS 信号的大型建筑物中)。

回退到 SNTP

有很多 SNTP 客户端代码可供您尝试。请记住,互联网连接不是通用的(设备在任何已知接入点之外可能仅支持 WiFi,用户可能已将设备置于飞行模式,设备可能具有移动数据功能,但在当前位置没有信号强度)。

如果这不起作用,请要求 Android 通过自己的 SNTP 或运营商 NITZ 刷新其挂钟

可以想象,取得 root 权限的设备可能能够以某种方式执行此操作,但 Android SDK 中没有任何内容可供普通应用程序强制执行此类刷新。请记住,连接性并不普遍(请参阅上一段中的名册)。

那么,回到:

那可能吗?

如果“那个”是保证在所有情况下都有效的解决方案,那么不,这是不可能的,因为不能保证您具有与任何时间源进行通信的能力。

如果“那个”是一个在设备有互联网连接的情况下保证工作的解决方案,那么您需要询问您的 SNTP 客户端库实现者是否可以达到 100 毫秒的精度。除了连接问题之外,SNTP 是唯一完全由您控制的策略,因为 GPS 可能不准确,并且 NITZ 不是您自己管理的东西。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Android 获得最准确的时间? 的相关文章

随机推荐

  • 在 std 命名空间中添加模板专业化

    背景 我试图回答这个问题为什么我的重载 我的建议之一 除了使用谓词之外 是移动自定义operator lt for std string位于命名空间 std 中 以便编译器比模板化版本更喜欢它 答案以闪电般的速度被否决 来自一位知名用户的评
  • 错误:格式不受支持,或文件损坏:需要 BOF 记录

    我正在尝试打开一个 xlsx 文件并打印它的内容 我一直遇到这个错误 import xlrd book xlrd open workbook file xlsx print The number of worksheets is book
  • ExpressJS 中的 req.query 和 req.param

    之间的主要区别req query and req param在快递中 两者有何不同 何时使用 then 在什么情况下使用 假设客户端在请求中发送 Android 键 值 对 使用哪一个 EDIT 假设android发送一个POST请求 gt
  • 如何在命令行上将文件名和扩展名分隔成变量

    我需要将文件 x dtsx 从位置 a 复制到位置 b 如果 x dtsx 已经存在于 b 中 那么我需要将 x dtsx 重命名为 x Standby dtsx 然后 重命名后将 x dtsx 复制到 b 我当前的代码如下所示 if ex
  • 如何在不创建 Umbrella 框架的情况下构建依赖于另一个框架的 iOS 框架

    我试图通过创建一些可重用的框架来简化我的开发 这些框架包含我在多个项目中经常重用的功能 然而 在设置我的框架之一时 我遇到了一个问题 这些类依赖于 Firebase 框架 阅读 Apple 文档后 不建议创建伞框架 一个嵌入另一个框架的框架
  • 使用 Unity\T4\anything 进行面向方面的日志记录

    在我的应用程序中 我们有一个跟踪记录器 我们在大多数重要方法的开头和结尾添加了日志语句 用于跟踪方法名称和参数值 现在这些跟踪语句使代码变得臃肿 阅读它们有点痛苦 我正在考虑如何将代码的这方面与我的业务逻辑分开 今天在读Unity的拦截框架
  • 我们如何使用Cocos2d来显示UIViewController和UIView?

    我正在尝试使用 Cocos2d 构建 iPhone 应用程序 但是我使用了四种类型的类 就像下面这样 interface MenuScene Scene end interface FlipView UIImageView CGPoint
  • 设置 blob 的过期限制

    我使用 Azure Storage 来存储信息 例如缓存机制 因此 对于给定的输入 我是第一次执行该工作 之后我会将结果保存在缓存中以供进一步使用 当我需要使用相同的给定输入解决问题时 我将直接从存储中获取已经准备好的解决方案 这一切都已实
  • 使用队列的异步持久客户端协议类

    我正在尝试了解 Python 3asyncio模块 特别是使用传输 协议 API 我想创建一个发布 订阅模式 并使用asyncio Protocol类来创建我的客户端和服务器 目前 我已经启动并运行了服务器 并侦听传入的客户端连接 客户端能
  • Microsoft.Build.Utilities.FileTracker 引发异常错误。发生在不同的项目中

    最近在 Win7 64 位中使用 Visual Studio 2010 Ultimate C 编译任何项目时都会出现以下错误 解决方法是添加
  • 如何使用 python 电子邮件获取解码附件文件名?

    我使用以下代码来提取附件的文件名 import email utils msg email message from string self request body http docs python org 2 library email
  • JNI。如何从 jobject 获取 jstring 并将其转换为 char*

    这是我到目前为止所拥有的 我传递一个有 2 个字段的对象 String 和 Integer 作为参数 我想发送信息来在C部分中处理它 这在这一点上并不重要 我在 jstring 声明中收到投诉 JNIEXPORT jint JNICALL
  • 将 Laravel 集合排序到 ID 数组

    是否可以使用单独的 ID 数组来订购关系集合 同时仍然通过关系进行访问 设置是Checklist有很多ChecklistItems 以及相关项的所需顺序作为属性存在Checklist item order 它只是按用户所需顺序排列的数字 I
  • 更改运行 netbeans 的 java 平台

    我正在使用 Netbeans 6 7 我在安装 Netbeans 之前首先安装了 Java 1 5 当我安装 Netbeans 时 它采用 Java 1 5 作为默认版本 然后我在我的机器上安装了Java 1 6 我不仅需要将特定项目的 N
  • 如何在用户密码中添加盐?

    我正在使用简单md5 password 格式 但我想加盐 那么我该怎么做呢 这是我的代码 if success data firstname firstname data lastname lastname data username us
  • 如何将新的本地分支推送到远程 Git 存储库并对其进行跟踪?

    我如何能 从另一个分支创建本地分支 通过git branch or git checkout b 推送本地分支 到远程存储库 即发布 但使其 可追踪 以便git pull and git push将工作 在 Git 1 7 0 及更高版本中
  • 如何消除错误“'.'”为 MEAN 堆栈运行“npm install”时,不被识别为内部或外部命令?

    从mean io 下载mean stck zip 是否安装了 npm 几分钟后我收到一个错误 请看截图 我该怎么办 npm http 200 https registry npmjs org event emitter event e mi
  • 如何替换图像的颜色?

    我想替换图像的颜色 例如 将所有蓝色变为红色 形状不会变形 当我尝试这个时 我可以通过迭代每个像素来交换颜色 但是交换区域的形状变成平面形状 示例1输入 http www tutorialwiz com tutorials changing
  • Android 从右到左菜单项

    我有一个幻灯片菜单 如图一所示 我需要将其项目标题从右到左对齐 就像幻灯片二一样 我尝试了重力 右但没有用 这是我的代码 menu menu
  • 如何使用 Android 获得最准确的时间?

    我真的不认为这个问题是重复的 类似问题的大多数答案都说使用 System currentTimeMillis 作为最准确的时间 但我注意到并排的两个 Android 设备可能会彼此相差 5 秒或更长时间 或者 更重要的是 实时 我相信 cu