android - 有没有办法检测用户何时更改了设备上的时钟时间?

标签 android time

有没有办法在 Android 中检测 Android 系统时钟何时被用户重置?

我正在设计一个应用程序,它使用系统时间来确定用户何时在某个时间到达某个地点,并且我不想依赖那时的网络可用性。显然,最好知道用户何时更改了系统时钟,这样他们就不能“作弊”。

最佳答案

是的,有。 ACTION_TIME_CHANGED Intent当设备时间改变时广播,你可以有一个方法在检测到这个 Intent 时触发。

此 Intent 自 API 级别 1 起就已在 Android 中使用,因此它应该适用于您可能需要兼容的任何平台。

您需要使用 BroadcastReceiver 处理广播:

public class TimeChangedReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        //Do whatever you need to
    }

}

您还需要在 list 中添加类似的内容:

<receiver android:name=".TimeChangedReceiver">
  <intent-filter>
    <action android:name="android.intent.action.TIME_SET" />
  </intent-filter>
</receiver>

这将使 Android 知道在检测到此类 Intent 时触发您的接收器。

这似乎与谁编辑时间无关,但也不会在您与网络同步时触发自动调整。但是,如果您丢失网络并重新获得它,这可能会触发,因为您的时间会略有不同(假设您使用的是自动网络时间)。

然而,根据我的经验,虽然手机上的时钟不是特别准确(因为它们通常依赖于与接收到的时间信号同步),但它们绝对不应该超过大约 30 秒或每小时分钟,绝对最大值,所以如果时间变化很小,你也许可以假设它是自动的。添加闰秒时,也可能会产生时间更改消息,尽管这些显然很小且不常见。

您可以使用 ConnectivityManager跟踪手机是否有连接,您可以根据它更改行为(即只要有网络连接,并且时间是自动/网络时间,忽略时间变化或其他东西),但我可以'找不到有关丢失/恢复网络连接的任何 Intent ,因此您可能必须使用轮询方法。

关于android - 有没有办法检测用户何时更改了设备上的时钟时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15544996/

相关文章:

java - 获取服务器的日期或时间

Java:跨越数月的两个日期之间的差异

google-sheets - Google表格根据另一个单元格的值更改背景颜色

java - Azure 移动集成问题

android - 如何在Google Play控制台中回滚到以前的版本(从工作版到Beta版)?

java - 如何删除文件?并提出有关限制的问题? Java 安卓

java - 将 DateFormat 设置为当前日期和时间

android:在浏览器中从网络下载文件时设置 Intent 过滤器以触发 Activity 时出现问题

java - 为什么 AES/CTR/NoPadding 坏了?

javascript - 实时时钟 javascript 从我的自定义时间开始