在我的应用程序中,我需要确保在使用应用程序时,用户正在使用其设备上的默认时区和时间。我有一些时间敏感的信息,我不能依赖网络计时,因为应用程序离线工作(没有互联网)。我试过:
TimeZone.current != TimeZone.autoupdatingCurrent
它没有给我我期待的结果。请提出一些解决方案。
fkaflof61#
您绝对无法验证当前设备时间是否“正确”,我相信这正是您正在尝试做的。即使您可以使用一些未记录的技巧检查用户的显式设置,也无济于事。所有用户需要做的就是打开飞行模式,将时间设置为他们想要的,然后将其设置为“自动”。时间将继续保持他们设置的,直到设备可以重新连接到网络。有些事情你可以做。您可以观察.significantTimeChangeNotification,以发现在某些情况下时钟何时发生变化,即使在后台也是如此。请记住,这是出于几个原因,最完全合适的,包括一天一次在午夜。您可以跟踪应用程序进入后台的时间,并确保时间总是向前移动,或者至少不会显著向后移动(注意在手机信号塔之间移动时进行小调整)。您可以跟踪systemUptime,以查找系统时钟的进度不如系统正常运行时间的进度的情况。重新启动手机将绕过此检查,但它应该永远不会导致误报。永远不可能以任何有意义的方式知道时钟是“正确的”,但有一些方法可以确定它是可疑的。
.significantTimeChangeNotification
1条答案
按热度按时间fkaflof61#
您绝对无法验证当前设备时间是否“正确”,我相信这正是您正在尝试做的。即使您可以使用一些未记录的技巧检查用户的显式设置,也无济于事。所有用户需要做的就是打开飞行模式,将时间设置为他们想要的,然后将其设置为“自动”。时间将继续保持他们设置的,直到设备可以重新连接到网络。
有些事情你可以做。您可以观察
.significantTimeChangeNotification
,以发现在某些情况下时钟何时发生变化,即使在后台也是如此。请记住,这是出于几个原因,最完全合适的,包括一天一次在午夜。您可以跟踪应用程序进入后台的时间,并确保时间总是向前移动,或者至少不会显著向后移动(注意在手机信号塔之间移动时进行小调整)。
您可以跟踪systemUptime,以查找系统时钟的进度不如系统正常运行时间的进度的情况。重新启动手机将绕过此检查,但它应该永远不会导致误报。
永远不可能以任何有意义的方式知道时钟是“正确的”,但有一些方法可以确定它是可疑的。