gpt4 book ai didi

android - 判断手机是否重启

转载 作者:行者123 更新时间:2023-11-29 01:36:36 34 4
gpt4 key购买 nike

我正在尝试检测自上次设置首选项值以来 Android 设备是否已重新启动。理想情况下,我想在没有 android.permission.RECEIVE_BOOT_COMPLETED 许可的情况下执行此操作。

我正在考虑的一种方法是存储另一个包含某种 session ID 的首选项值。当我更新有问题的首选项值时,我也会更新 session 值。当我检查 session 值首选项中的值时,如果它等于当前 session 值,则没有重新启动。如果当前 session 值与保存的值不同,则表示已重新启动。不幸的是,我已经在文档中挖掘了很长一段时间,试图找到一个 session 值,但我找不到任何东西。

我想在两件事中的一件上得到帮助。如果您可以提供我在哪里可以找到类似于 session ID 或启动 ID 的值,那么我将使用我的算法。或者,我愿意接受另一种算法来解决问题。非常感谢!

最佳答案

这太过时了,但我认为我有一个很好的解决方案,不需要运行任何服务或任何特殊的后台进程。

只需将时间保存到持久内存中,例如共享偏好。这可以在您需要的任何引用时间执行。对我来说,它是在启动计时器时,以便它即使在重新启动后也能持续存在。计时器仅与 SystemClock.elapsedRealtime() 相关,这是自上次启动以来的时间,因此您不能使用 System.currentTimeMillis(),这是自 Unix 纪元(1970 年 1 月 1 日 00:00:00 UTC)以来的总时间).

如果您想检查手机是否仅在应用程序启动时重新启动,请将其添加到您的 onCreate。

    //Create a SharedPreferences
SharedPreferences savedKeys = getApplicationContext().getSharedPreferences("MyPref", 0);
SharedPreferences.Editor editor = savedKeys.edit();

if (((System.currentTimeMillis() - SystemClock.elapsedRealtime())-(savedKeys.getLong("key_oldDelta", 0)))>100) {

//Run code here or set a boolean to true for system reboot.

}

//Save the new values.

editor.putLong("key_oldDelta", (System.currentTimeMillis() - SystemClock.elapsedRealtime()));
editor.commit();

以下部分代码将获取自上次启动以来当前 Unix 时间和系统时间的增量(差异):(System.currentTimeMillis() - SystemClock.elapsedRealtime())

如果系统重新启动,与重新启动前相比,这些数字将分别变大和变小。

示例:您在系统时间 = 100 和 Unix 时间 = 1000 时保存时间。您在 450 之后重新启动,并在另一个 50 之后重新启动应用程序。自从您记录这些值后,现在已经过了 500。他们现在是 10 和 1500。

新增量:1500-10=1490

旧增量:1000-100=900

增量的增量:1490-900=590

重新启动后,最后一个数字将始终更高。重启后过了多长时间并不重要。差异只会越来越大,因为一个数字(Unix 时间)不断向前移动,而另一个数字在重启时不断重置为零。为了便于理解,我的示例使用了非常小的数字,但请记住,实际数字以毫秒为单位,并且自 1970 年以来已经过去了相当多的时间。这就是为什么我的代码在 if 语句末尾显示 <100。这使应用程序有 100 毫秒的时间来运行数学。实际上,它需要 1 毫秒左右的时间,但手机不可能在少于 100 秒内重启,因此这是一个安全值。

关于android - 判断手机是否重启,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27562179/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com