我们有一个正在开发的 android(或 iphone)客户端。客户端允许 android 用户将条目发送到我们也开发的服务器。如果客户端在用户将条目发送到服务器的那一刻没有数据服务(GPRS),客户端还支持将条目保存到离线数据库并稍后将其发送到服务器。
整个过程的一个重要方面是用户将条目发送到服务器的时间戳的准确性(无论条目是实时生成的还是由客户端从离线数据库发送的)
当客户端可用时,我们获得 GPS 位置,并能够使用 GPS 时间戳将其发送到服务器(或将 GPS 时间戳保存在离线数据库中,稍后再发送到服务器)。但是,如果用户关闭了 GPS(和所有其他定位服务),则设备将没有 GPS 定位,因此服务器无法准确确定何时进行了输入。我们不能使用本地设备时钟,因为用户可能会更改时钟以在与实际发生时间不同的时间进行条目(这些条目是用户工资的一部分,因此他可能有兴趣“修复”它们)。
所以基本上我正在寻找一种方法来尽可能地确定当我不能信任手机的内部时钟时进行某些输入的时间。该算法应该支持实时发送的条目或从离线数据库发送的条目。该算法还应支持用户更改手机时间、打开/关闭手机、在手机上运行应用程序时打开/关闭 GPS 等情况。
我想到的几个想法:
- 虽然我不能相信手机的时间,但它仍然可以充当秒表:有一个循环直到应用程序存在的类,循环将休眠 1 秒并将内部时钟变量增加 1 秒。在我的代码获取的每个 GPS 位置上,我们都会更新内部时钟变量。这样我就有了一个来自设备外部(来自 GPS)的绝对时钟,当客户端向服务器发送条目时,我们可以使用内部时钟作为绝对时间。
优点:用户不能修改这个时钟,因为它只有在我们从 GPS 获得位置时才会更新
缺点:应用程序需要至少一个 GPS 定位,然后用户才能进行任何可靠的输入
- 我可以利用服务器有一个准确的时钟这一事实。如果客户端将向服务器发送条目的年龄为 10 分钟的信息,则服务器可以使用其内部时间并知道条目的确切时间。
最大的问题是如何知道入职年龄?我考虑将条目保存到年龄为 0 的离线数据库中,然后每 1 秒增加数据库中条目的年龄。问题是,如果应用程序关闭和/或设备关闭,现在会发生这种情况
这是我目前卡住的地方。任何关于如何解决这个问题的想法都非常受欢迎
谢谢