java - 强制停止应用程序后检测用户更改时钟时间

标签 java android time broadcastreceiver clock

当应用处于前台、后台或从Recent App 终止时,我可以通过使用 android.intent.action.TIME_SET 来检测更改时钟时间,请遵循 here .
但是,如果我在 Setting->AppsForce Stop 应用程序,我将无法再接收此广播。
目前,我想检测用户更改时钟时间在 ForceStop 之后返回到我的应用程序,所以我这样做了

long deltaTimeBeetweenCurrentTimeAndTimeSinceReboot = System.currentTimeMillis() - SystemClock.elapsedRealtime();
long oldDelta = mSharedPreference.getDeltaTimeBeetweenCurrentTimeAndTimeSinceReboot();
if(deltaTimeBeetweenCurrentTimeAndRebootTime - oldDelta > 5000){
    // clock time change
}

我的想法是在当前时间 (System.currentTimeMillis()) 和重启后的时间 (SystemClock.elapsedRealtime()) 之间保存一个增量。每次我打开应用程序时,我都会比较 oldDelta 和 newDelta(第一次安装除外)。它适用于以下情况:用户 Fore Stop app->Change time->come back to app.

但是,仍然有 1 种情况是:用户 Fore Stop 应用程序 -> 更改时钟时间 -> 重启设备 -> 打开我的应用程序。此时我无法使用上述方法来检查时钟时间是否已更改,因为重新启动后 SystemClock.elapsedRealtime()将重置。在这种情况下,我如何检测时钟时间是否发生了变化?
任何帮助或建议将不胜感激。

最佳答案

几个月前我也遇到过同样的情况。我没有找到任何直接破案的答案,所以我不会帮助你。但我可以给你一些建议:
换个角度看。

我在我的案例中做了什么,我回答了自己的问题:

“我真的想知道用户已经更改了时间 - 因为我隐式地告知/向用户展示了这个事实吗?”

“我是否想知道用户更改了时间 - 因为我需要它在应用程序后台调用某些操作或计算?”

在我的例子中,我的答案是“否”或"is"。因此,对于有问题的 Force-Stop + reboot 情况,我假设时间可能已经更改,并且我像第一次启动应用程序一样重置了我的应用程序的时间配置。

如果对您有帮助,请告诉我。

关于java - 强制停止应用程序后检测用户更改时钟时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47151170/

相关文章:

language-agnostic - 1970 年之前的日期有何特别之处?

java - 我的查询给出以下错误,意外的标记 WHERE

java - java中反射和后期绑定(bind)的区别与实时示例

java - 使用 AND 和 Where 从网页传递空字符串以选择查询时遇到问题

java - 致命异常 : Unable to start activity ComponentInfo{. ..} : java. lang.NullPointerException

haskell - 将 NominalDiffTime 打印为小时、分钟和秒

Java整数超出范围

android - 无法从 Recycler View Adapter 启动 Activity

android - onCreateOptionsMenu() 调用 super

java - 从转换毫秒显示小时数显示不正确