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