【问题标题】:Is there a unmanipulatable device time? [duplicate]是否有不可操作的设备时间? [复制]
【发布时间】:2014-01-28 02:39:16
【问题描述】:

设备中的时钟是否始终返回特定时间,与用户时间设置和互联网连接无关?
这样的时间在检查许可证是否已过期时非常有用。

【问题讨论】:

  • 没有互联网连接非常困难,您可以使用共享首选项节省时间,当用户打开应用程序时,如果他有互联网连接,那么将完成一个简单的呼叫并获得许可证选中,您可以进行的另一项检查也是保存上次打开日期,并在加载时检查 date > last_opened_date,如果不是,您可以显示警告消息。

标签: android datetime


【解决方案1】:

GPS 时钟独立于系统时钟/时间设置和网络连接。

您可以通过请求位置修复并访问Location getTime() 来获取时间戳。

当然,这对于许可证检查来说并不是万无一失的,因为它也可以被欺骗。 @CommonsWare 来自 cmets 的笔记也值得考虑:

请注意,这仅适用于具有 GPS 的设备,其中 GPS 由用户启用,您可以获得 GPS 信号,以及您不介意请求 ACCESS_FINE_LOCATION 权限的应用。因此,这并不是真正的“总是”,尽管它可能足以满足许多需求。

【讨论】:

  • 请注意,这仅适用于具有 GPS、GPS 由用户启用、您可以获得 GPS 信号的设备,以及您不介意请求 ACCESS_FINE_LOCATION 权限的应用.因此,这并不是真正的“总是”,尽管它可能足以满足许多需求。
  • 谢谢,离线似乎无法获得可靠的时间信息。
【解决方案2】:

没有时间处理这个用例。 Here is a list Android 中可用的时间类型:

提供三种不同的时钟,不要混淆:

System.currentTimeMillis() 是标准的“挂钟”(时间和 date) 表示自纪元以来的毫秒数。挂钟可以 由用户或电话网络设置(参见 setCurrentTimeMillis(long)), 所以时间可能会意外地向后或向前跳跃。这个时钟 仅应在与真实日期和日期对应时使用 时间很重要,例如在日历或闹钟应用程序中。 间隔或经过时间测量应使用不同的时钟。如果 您正在使用 System.currentTimeMillis(),请考虑收听 ACTION_TIME_TICK、ACTION_TIME_CHANGED 和 ACTION_TIMEZONE_CHANGED 意图广播以了解时间何时发生变化。

uptimeMillis() 是 自系统启动后以毫秒为单位计数。这个时钟停止 当系统进入深度睡眠时(CPU 关闭、显示暗、设备 等待外部输入),但不受时钟缩放的影响, 空闲,或其他省电机制。这是大多数人的基础 间隔定时,例如 Thread.sleep(millls)、Object.wait(millis) 和 System.nanoTime()。这个时钟保证是单调的,并且是 适用于区间不跨越设备时的区间计时 睡觉。大多数接受时间戳值的方法目前都期望 uptimeMillis() 时钟。

elapsedRealtime() 和 elapsedRealtimeNanos() 返回系统启动后的时间,包括深度睡眠。 这个时钟保证是单调的,甚至会继续滴答作响 当 CPU 处于省电模式时,推荐的依据是 通用间隔计时。

【讨论】:

    【解决方案3】:

    设备中是否存在始终返回特定时间的时钟,与用户时间设置和互联网连接无关?

    不,抱歉。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      • 2018-07-09
      • 2021-01-17
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      相关资源
      最近更新 更多