如何知道 Intent ACTION_TIME_CHANGED 是否来自直接用户交互

How know if Intent ACTION_TIME_CHANGED is coming from direct user interaction

如何知道 Intent ACTION_TIME_CHANGED 是否来自直接用户交互。

我尝试检查 Intent 中的标志 FLAG_FROM_BACKGROUND,但始终为 0,即使 Intent 是由同步网络触发的。

有什么帮助吗?

谢谢!

我真的不知道它是否有效,我目前无法尝试,但是有设置 API,您可以获得一些信息。我不确定您是否可以在没有 root 的情况下阅读此内容,但请尝试一下。

  String isAutoTime = Settings.System.getString(
  getContentResolver(), 
  Settings.System.AUTO_TIME);

  boolean autoTimeEnabled = false; 

  if(isAutoTime.equals("1")){

    autoTimeEnabled = true;

  }
  //usually You don´t need this else statement, because the boolean is
  //created as a flase boolean. Just want to show how it works
  else if(isAutoTime.equals("0")){

    autoTimeEnabled=false;

  }

由于 API 17,Settings.System.AUTO_TIME 已弃用,因此您必须使用 Settins.Global.AUTO_TIMESettings.Global.getString()

如 Settings.Global 中 API 17 所述:

应用程序可以读取这些但不允许写入

所以我觉得检测是否启用了网络获取时间应该是没有问题的。如果有效,您可以使用 ACTION_TIME_CHANGED 处理您的 BroadCast,并且当时间更改时,检查是否在设置中启用了此选项。所以你可以知道它是由用户还是系统更改的。

无论如何,这只是一个想法,我暂时无法测试它是否真的有效,因为我这里没有IDE。