让用户在安卓系统中更改时间

5

Android似乎没有提供一种方法让用户应用程序更改系统时间。相反,我想要做的是让用户更改时间。打开日期和时间设置很容易:

startActivity(new Intent(android.provider.Settings.ACTION_DATE_SETTINGS));

我想知道的是:
  1. 是否可以直接链接到设置时间选项?
  2. 是否可以检查用户正确设置了时间?我知道有 TIME_CHANGED 广播消息,但我找不到任何文档。
更新: TIME_CHANGED 广播消息没有提供有关其如何更改的任何信息。虽然这并没有明确记录,但我尝试使用 getDatagetExtras,但没有收到任何信息。此外,查看 文档 的其余部分,似乎除非明确记录,否则不会传递任何数据或额外信息。同样,ACTION_DATE_SETTINGS 实际上已被 记录 不需要输入,并且它隐含地不包含额外信息,因此无法更精确地控制它。

CommonsWare 指出了对我来说本应显而易见的事情——仅仅检查用户是否将时间设置为从服务器检索到的值,而不担心选项菜单中所花费的时间,几乎总是有效的。尽管这种假设实际上可能是错误的,如果我使用这种方法,那么我会确保消息表明时间可能被正确或不正确地设置,而不是使用明确的语句。

然而,我发现了elapsedRealtime,因此我将实际上正确地实现此检测。

3个回答

8

是否可以直接链接到设置时间选项?

尝试:

startActivity(new Intent(android.provider.Settings.ACTION_DATE_SETTINGS));

能否检查用户是否正确设置了时间?

::耸肩::

在应用程序重新获取控制权后,检查时间。


我已经在问题中提供了那个意图。我的问题是,您是否可以直接链接到设置时间选项,而不仅仅是一般的时间/日期设置。虽然只需要一个点击,但我仍然希望尽可能地方便用户。 - Casebash
但是,我该如何计算用户在时间设置应用程序中花费的时间呢?我不能使用系统时钟,因为用户正在更改它。这通常不会有太大影响,但假设一个朋友打断了他们,他们在15分钟后完成设置时间。我知道这有点傻,但应用程序永远不应该说某些事情是正确的,而实际上并不正确。 - Casebash
抱歉——我没有注意到。如果时间对您比用户更重要,那么您根本不应该依赖用户。使用NTP客户端并自己获取时间。我记得在“android-developers”列表上有一些帖子,关于有人成功使用了NTP客户端。 - CommonsWare
当时间被检索到后,我给用户提供使用时间偏移量或手动更改时间的选项。无论如何,我刚刚发现我可以使用elapsedRealtime来处理调整,而不是试图找出广播消息。实际上,如果我真的需要,这种方法也允许我找出广播消息的时间变化。 - Casebash

2

如果有人想要从ADB打开

adb shell am start -a android.settings.DATE_SETTINGS

0

我认为问题的意图违背了安卓设计哲学:如果你直接将用户发送到时钟来更改时间,这将自动设置时间不是由设备(或某个ntp服务器)自动设置,而是由用户设置。用户可能没有意识到这一点,并想知道为什么时钟从未自动纠正自己,而它曾经做过。

如果您想确保时间准确,需要做一些工作并实现自己的应用程序时间服务器: 使用sntp互联网时间服务器请求获取时间,然后启动自己的精确计时器以计算秒数-我认为很难比1秒更好。 不要使用Thread.sleep(),根据我的测试,它不够精确。 我使用ScheduledExecutorService.scheduleAtFixedRate 我只在两台设备上进行了一些测试,在大约3小时内保持在1秒以内,当我认为足够好时停止测试。此外,还存在一个问题,即在安卓进入睡眠模式后,所有内容都将在某个时候停止。

如果您已经获得GPS位置,也可以使用这些位置的时间进行修复。只需永远不要使用第一个位置,因为它可能是来自内存的最后已知位置。记住上次修复的时间,并仅在新修复的时间较高/更新时使用。


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