有没有一种方法可以检测到用户在Android中将Android系统时钟重置为的时间?

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

最佳答案

就在这里。更改设备时间时会广播 ACTION_TIME_CHANGED 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知道触发您的接收器。

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

但是,根据我的经验,尽管手机上的时钟尤其是不够准确(因为它们通常依赖于与接收到的时间信号同步),但绝对不应该每小时损失超过30秒或一分钟,这绝对是最大的,因此,如果时间更改很小,您可能会认为它是自动的。秒添加时,也很可能会产生时间更改消息,尽管这些时间显然很小且很少见。

您可以使用 ConnectivityManager 来跟踪电话是否已建立连接,并可以基于此更改行为(即,只要存在网络连接,并且时间是自动/网络时间,就可以忽略时间更改等)但我找不到丢失/恢复网络连接的任何意图,因此您可能必须使用轮询方法。

09-11 19:37
查看更多