【发布时间】:2014-06-10 13:02:42
【问题描述】:
我正在开发一个 android 应用程序,并遇到了确定系统首次启动时间的问题。我的意思是我需要测量从设备首次启动到已经过去了多少时间。
我知道侦听 ACTION_BOOT_COMPLETED 并将任何内容保存在 SharedPreferences 中的解决方案,但我需要另一个解决方案,因为这个解决方案在某些情况下不起作用。也许有任何系统属性?
用例(摘自discussion)
- 我从服务器收到的每个文件的文件名都包含时间戳
取自
System.currentMillis() - 我比较这些时间戳以确定哪个文件是最新的。
- 现在,用户提前几个月更改系统时间。
- 我仍然能够确定用户更改系统时间后下载的最新文件。
- 现在,用户将时间更改回原始设置。
- 在比较时间戳时,第 4 步下载的文件总是胜出。
解决这个问题的灵丹妙药是一个时间戳,它计算自首次启动(出厂重置后)以来的秒数。就像SystemClock.elapsedRealtime(),但每次启动后都没有重置。不幸的是,到目前为止的答案告诉我们,这个灵丹妙药并不存在。
但是,许多答案显示了如何解决该问题的多种选择。 OneWorld123 评论了每个答案,这是否符合他的需求。
【问题讨论】:
-
那么,为什么旧答案不能满足您的要求?
-
@hasan83 ozbeks 的回答并未涵盖“首次启动”这一事实。请参阅我的赏金说明。
-
@OneWorld,恐怕我没有更具体的解决方案,但您可以调查的是查看外部 SD 卡上文件/目录的时间戳 - 例如目录
/sdcard/Android/是由 Android 系统创建的(我猜是在首次启动时?),因此您可以查看其上或其中的文件或其他系统创建的目录中的时间戳以确定日期/时间的时间设备首次启动(只要在第一次启动期间时钟正确)。不幸的是,我不知道这是否有效。 -
@JonasCz "...在外部 SD 卡上..." 如果设备在第一次启动时没有存储卡怎么办?如果外置 SD 卡在首次启动几年后首次插入会怎样?
-
@OneWorld 为什么你用用例更新了最初的问题?答案很好,但这不是我的用例。
标签: java android time clock system-clock