【发布时间】:2018-04-19 10:56:15
【问题描述】:
我可以通过使用android.intent.action.TIME_SET关注here来检测应用程序在前台、后台或从Recent App杀死时更改时钟时间。
但是,如果我在 Setting->Apps 中 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->更改时间->返回应用程序。
但是,仍然有1个案例是:用户Fore Stop app -> 更改时钟时间-> 重启设备-> 打开我的应用程序。此时我无法使用上述方法检查时钟时间是否已更改,因为重启后SystemClock.elapsedRealtime() 将重置。在这种情况下,如何检测时钟时间已更改?
任何帮助或建议将不胜感激。
【问题讨论】:
-
所以基本上你声称,如果用户强制停止你的应用程序,那么通过清单磁贴注册的广播接收器不会被触发?
-
使用远程时间服务器可以吗?
-
@SonTieu 不幸的是,我的应用可以在没有互联网连接的情况下运行,因此使用远程服务器不是最佳方式
-
制作不同的服务应用并在后台安装
-
建议使用服务器检查设备时间设置,如worldclockapi.com/api/json/utc/now,(或者您可以提供自己的api)。您的逻辑将变得更加简单和可靠。缺点:需要网络
标签: java android time broadcastreceiver clock