我可以使用Recent App
关注here来检测来自android.intent.action.TIME_SET
的应用程序在前景,背景或终止时的更改时间时间。
但是,如果<{>>设置 - &gt;应用中的Force Stop
应用,我将无法再接收此广播。
目前,我想在ForceStop之后检测用户更改时钟时间回到我的应用程序,所以我
long deltaTimeBeetweenCurrentTimeAndTimeSinceReboot = System.currentTimeMillis() - SystemClock.elapsedRealtime();
long oldDelta = mSharedPreference.getDeltaTimeBeetweenCurrentTimeAndTimeSinceReboot();
if(deltaTimeBeetweenCurrentTimeAndRebootTime - oldDelta > 5000){
// clock time change
}
想法是我在当前时间(System.currentTimeMillis()
)和重启后的时间(SystemClock.elapsedRealtime()
)之间保存了一个增量。每次打开app时,我都会比较oldDelta和newDelta(第一次安装除外)。它的效果很好:用户Fore Stop
app-&gt;更改时间 - &gt;返回应用。
但是,仍有1个案例:用户Fore Stop
app - &gt;更改时钟时间 - &gt;重启设备 - &gt;打开我的应用。此时我无法使用上述方法检查时钟时间是否已更改,因为重启后SystemClock.elapsedRealtime()将重置。在这种情况下,如何检测时钟时间已发生变化?
任何帮助或建议都会非常感激。
答案 0 :(得分:3)
几个月前,我处于相同的状况。我没有找到任何直接解决案件的答案,所以我不会帮你。但我可以给你一些建议:
以不同的观点来看待它。
在我的案例中我做了什么,我回答了自己的问题:
“我真的想知道用户已经改变了时间 - 因为我隐含地通知/向用户提供这个事实吗?”
OR
“我是否想知道用户已经改变了时间 - 因为我需要它来在应用程序后台调用某些操作或计算?”
在我的情况下,我有NO-YES答案。因此,对于Force-Stop + reboot的有问题的情况,我认为时间本来可以改变,我同样在第一次应用程序启动时重置我的应用程序的时间配置。
让我知道它是否对你有所帮助。
答案 1 :(得分:1)
没有外部标准具很难实现(后端是最好的选择)。您可以节省用户强制停止应用程序的时间以及应用程序活动时再次与某个预定义的增量(时间窗口)进行比较。如果你得到一个&#34;大&#34;差异考虑用户是作弊。
您也可以使用文件系统的时间戳来定义一些不一致。