如何检查是否启用了“自动日期和时间”?

32

我需要检查安卓设备中是否启用了“自动日期和时间”。如果未启用,我需要显示弹出窗口提示未启用。

这是否可以实现?如果可以,如何检查是否已启用?


据我所知,SDK中没有公共方法可以做到这一点。 - user2693443
6个回答

54

3
仅适用于API 17及以上版本。 - Shad
2
一个快速的搜索显示,在此之前,android.provider.Settings.System.AUTO_TIME是一种解决方案。 - velis
感谢您完成答案。点赞! - Shad
正在使用7.1.2版本。 - Vlad

40
public static boolean isTimeAutomatic(Context c) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        return Settings.Global.getInt(c.getContentResolver(), Settings.Global.AUTO_TIME, 0) == 1;
    } else {
        return android.provider.Settings.System.getInt(c.getContentResolver(), android.provider.Settings.System.AUTO_TIME, 0) == 1;
    }
}

8

我想指出,可能存在作弊的情况(我刚在三星Galaxy S4上进行了测试,安卓5.0.1系统):

  • 禁用自动时间
  • 断开网络连接(飞行模式,无Wi-Fi等)
  • 重新启动手机(否则会获取实时时间)
  • 打开自动时间设置

今天完成的结果:

Unix时间:1129294173

日期:14102005024933

是否自动?1(使用android.provider.Settings.Global.getInt(getActivity().getContentResolver(), android.provider.Settings.Global.AUTO_TIME, 0))

而今天绝对不是2005年10月14日。


没错,刚刚发现这个问题,这就是我来这里的原因 :) 是否有任何会话 ID 可以用来跟踪重启是否发生? - Atomico

3
if(Settings.Global.getInt(getContentResolver(), Global.AUTO_TIME) == 1)
{
    // Enabled
}
else
{
    // Disabed
}

请向OP(以及未来的SO访问者)解释您为什么这样做。 - Jay Blanchard

2

检查自动时间或时区是否已启用?(Kotlin)

fun isAutoTimeEnabled(activity: Activity) =
    Settings.Global.getInt(activity.contentResolver, Settings.Global.AUTO_TIME) == 1

fun isAutoTimeZoneEnabled(activity: Activity) =
    Settings.Global.getInt(activity.contentResolver, Settings.Global.AUTO_TIME_ZONE) == 1

2
在 Kotlin 中,您可以使用以下代码:
fun isTimeAutomatic(c: Context): Boolean {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
    Settings.Global.getInt(c.contentResolver, Settings.Global.AUTO_TIME, 0) == 1
} else {
    Settings.System.getInt(c.contentResolver, Settings.System.AUTO_TIME, 0) == 1
}}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接