离线模式下获取设备的实际日期时间

6
我正在开发一款安卓应用程序。我需要解决以下问题:
1)该应用程序可以在线和离线工作。该应用程序有一个功能可以在应用程序内创建和保存笔记。同时,当应用程序连接到互联网时,我需要将这些笔记发送到后台服务器。每个笔记中都有一个名为"DATECREATED"的字段(即实际创建笔记的日期和时间)。 问题:如果用户在设备上设置了错误的日期时间,我的应用程序将向服务器发送错误的日期时间信息。我想知道如何解决这个问题?任何想法都会受到赞赏。

1
你能在这里发布你的代码吗? - Sandeep Singh
抱歉,这与代码无关。我需要实现运用案例的逻辑。 - Anees Deen
发送反映用户设备上时间的日期时间有什么问题? - laalto
创建时间对于将来的参考非常重要,这是客户的要求。 - Anees Deen
2个回答

4
当您最终发布到服务器时,请同时添加该特定时间。 new Date().getTime() 将提供一个值,您可以将其与服务器的日期时间进行比较。如果例如晚了2小时,则将帖子的时间设置为2小时前。
因此,请发送用户提交帖子的时间和实际发送时间。

2
谢谢。如果用户在创建笔记后更改设备时间,可能会出现问题。还有其他解决此用例的方法吗? - Anees Deen
2
我似乎找不到一个回调函数或某种监听器来通知设备设置。但是,您可以运行一个服务,每隔几秒钟(比如30秒)检查一次时间是否与oldTime + 30相同,并从那里继续,但这可能会变得非常繁琐。 - dumazy
1
是的,我有同感。我认为没有其他可用的解决方案。 - Anees Deen
1
@AneesDeen 或许在创建笔记的时候启动计时器。然后,当您有网络连接时,发布带有从创建开始经过的时间的笔记。 - dmestrovic
笔记是无限的。如果我为每个笔记启动计时器,那么这确实是一种负担。另外,如果我杀死应用程序并重新打开会发生什么? - Anees Deen

0

您可以使用网络时间获取当前日期和时间。

LocationManager locManager = (LocationManager) mContext
            .getSystemService(mContext.LOCATION_SERVICE);
    long lastSyncTime = locManager.getLastKnownLocation(
            LocationManager.NETWORK_PROVIDER).getTime();

我在我的应用程序中使用它来根据位置获取时间。 我认为它也可以在在线和离线模式下工作。


1
如果是只有WiFi的平板电脑会发生什么? - Dilip Rajkumar
根据您上次连接互联网的位置,它显示时间。 您还需要此权限: android.Manifest.permission#ACCESS_FINE_LOCATION - Ashish Vora
2
这只是您收到最后位置更新的时间。在内部,它以与“new Date().getTime()”或“System.currentTimeInMillis()”相同的方式获取时间。因此,如果用户更改了设备的日期设置,则仍将出现错误。 - dumazy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接