java - 完全消除对 Android 时钟的依赖并使用来自服务器的自定义时间

标签 java android web-services time

我有一个应用程序,它使用平板电脑记录信息,平板电脑同步到服务器,然后在服务器上运行报告结果。用户一整天都在使用平板电脑,而且一整天都在旅行。

用户完成这些任务的时间对报告至关重要,我们曾多次遇到无法依赖设备时间的情况。

  1. 用户有时会在设备上手动将时间设置为不同的时间,以便看起来他们完成了更多工作 - 这种情况发生的次数超出了我们的预期
  2. 当依靠设置为“自动”的时间时,时间有时会随着用户在网络之间移动而跳跃
  3. 当平板电脑最初开机时,设备时间有时会设置为 1970

我有一个网络服务来获取当前未使用的服务器时间,因为我们不能依赖具有互联网连接的用户,因为由于工作的性质,他们通常根本没有任何连接。但是,他们通常每天同步一次数据,或者至少每隔几天同步一次。

我想创建一些东西来获取服务器时间并从那时起计算时间,应用程序将使用这段时间。只要他们连接,这个时间就会更新,只是为了确保时间同步。有没有人对执行此操作的最佳方法有任何建议?请记住,我们发送的时间至关重要 - 如果多次误报,可能会导致有人丢掉工作。

提前致谢!

最佳答案

Android 确实有 3 种不同的计时器...... SystemClock

其中一个对你有用,uptimeMillis()

应用程序启动后,保存当前的 uptimeMillis...当应用程序结束时...您可以从“uptimeMillis() - oldUpTimeMillisThatWasStored”中获得差异...

Android 会在时间或时区更改时发送广播... 如果你有一个广播接收器从 list 文件中捕获这些变化...... 您会知道时间何时更改(即使您的应用程序未运行)。

ACTION_TIME_CHANGED

关于java - 完全消除对 Android 时钟的依赖并使用来自服务器的自定义时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11471544/

相关文章:

java - Kafka堆外内存泄漏

Android SurfaceView 导致屏幕闪烁

android - 之后删除了应用程序图标 新包尚未在系统中注册 遇到消息

c# - 在可重用类中封装多个服务引用操作

java - 如何在 Spring 将@Scheduled(cron) 与SpEL 一起使用?

java - 在maven中更改pom上的包装时无法找到或加载主类

java - 无法使用beanshell在jmeter中重命名具有动态路径的文件

android - 我想在对话框 fragment 中设置最大高度

java - hybris 通过网络服务应用全局折扣

java - HashMap 与 Camel cxf :component POJO dataFormat