2

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

用户完成这些任务的时间对报告至关重要,我们已经发生过几次不能依赖设备时间的情况。

  1. 用户有时会在设备上手动将时间设置为不同的时间,以便看起来他们已经完成了更多的工作——这比我们预期的要多
  2. 当依赖设置为“自动”的时间时,时间有时会随着用户在网络之间旅行而跳跃
  3. 最初打开平板电脑时,有时设备时间设置为 1970

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

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

提前致谢!

4

3 回答 3

1

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

其中之一将对您有用,uptimeMillis()

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

当时间或时区更改时,Android 确实会发送广播...如果您有一个广播接收器,它可以从清单文件中捕获这些更改...您将知道时间何时更改(即使您的应用程序没有运行) ..

ACTION_TIME_CHANGED

于 2012-07-13T13:47:09.080 回答
0

我没有完成这个,但现在已经实施了一个解决方案。

我创建了一个在后台运行的服务,并每隔一段时间从 web 服务下载日期,并使用 Timer 来增加调用 web 服务之间的时间。

除此之外,我使用 GPS 来获取当前时间和日期,如果可能,它会使用它,如果没有,它会使用这个内部时钟。

理论上,大多数时候时间应该是正确的!

于 2012-12-07T16:02:35.303 回答
0

您需要持久的互联网连接。否则,您必须依赖可以修改的客户端时间,如您已经提到的。您可能能够跟踪更改,但前提是应用程序正在运行,这很容易通过Settings -> Apps在更改时间之前禁用应用程序 ( ) 来伪造。

设想:

  • 用户完成任务,客户时间被存储
  • 用户修改时间
  • 设备获取互联网并与服务器同步,告诉他当前时间和任务,以便服务器可以计算任务“真实”完成时间。<-- 错误
于 2012-07-13T13:48:53.530 回答