首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我如何获得“网络”时间,(从“自动”设置,称为“使用网络提供的值”),而不是在电话上的时间?

我如何获得“网络”时间,(从“自动”设置,称为“使用网络提供的值”),而不是在电话上的时间?
EN

Stack Overflow用户
提问于 2011-11-08 11:49:36
回答 8查看 120.3K关注 0票数 61

我想在我的应用程序中找到一种方法,将日期和时间与外部源提供的内容同步。

我不想使用电话时间,因为我可能会得到一个可能5分钟左右的实时。增加或少于5分钟= 10分钟!

我听说过GPS卫星或网络天线中的时间信息。

我尝试过使用System.getCurrentTime,但是我得到了设备的当前信息,所以,如果我的设备提前5分钟设置,它就会显示错误的时间。

编辑

想问一个简短的问题:这次我要怎么做?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-11-21 15:31:16

我不知道,但我觉得这个问题很有趣。所以我挖了机器人密码..。谢谢开源:)

您显示的屏幕是DateTimeSettings。复选框“使用网络提供的值”与共享首选项String KEY_AUTO_TIME = "auto_time";以及Settings.System.AUTO_TIME相关联。

在2个网络mAutoTimeObserver s:GsmServiceStateTrackerCdmaServiceStateTracker中,一个名为GsmServiceStateTracker的观测值可以观察到这个设置。

当设置变为真时,这两个实现都调用一个名为revertToNitz()的方法。显然,NITZ相当于载波世界中的NTP。

底线:感谢revertToNitz(),您可以将时间设置为运营商提供的值。不幸的是,我还没有找到一种获取网络时间的机制。如果您真的需要这样做,恐怕您必须复制这些ServiceStateTracker的实现,捕捉框架提出的意图(我想),并向mSavedTime添加一个getter。

票数 64
EN

Stack Overflow用户

发布于 2013-02-06 03:19:15

http://commons.apache.org/net/download_net.cgi获取库

代码语言:javascript
运行
复制
//NTP server list: http://tf.nist.gov/tf-cgi/servers.cgi
public static final String TIME_SERVER = "time-a.nist.gov";

public static long getCurrentNetworkTime() {
    NTPUDPClient timeClient = new NTPUDPClient();
    InetAddress inetAddress = InetAddress.getByName(TIME_SERVER);
    TimeInfo timeInfo = timeClient.getTime(inetAddress);
    //long returnTime = timeInfo.getReturnTime();   //local device time
    long returnTime = timeInfo.getMessage().getTransmitTimeStamp().getTime();   //server time

    Date time = new Date(returnTime);
    Log.d(TAG, "Time from " + TIME_SERVER + ": " + time);

    return returnTime;
}

getReturnTime()与System.currentTimeMillis()相同。

应该使用getReceiveTimeStamp()或getTransmitTimeStamp()方法。

在将系统时间设置为1小时之前,您可以看到不同之处。

代码语言:javascript
运行
复制
local time :
System.currentTimeMillis()
timeInfo.getReturnTime()
timeInfo.getMessage().getOriginateTimeStamp().getTime()

NTP server time :
timeInfo.getMessage().getReceiveTimeStamp().getTime()
timeInfo.getMessage().getTransmitTimeStamp().getTime()
票数 24
EN

Stack Overflow用户

发布于 2015-04-16 08:07:19

试试下面的代码片段:

代码语言:javascript
运行
复制
String timeSettings = android.provider.Settings.System.getString(
                this.getContentResolver(),
                android.provider.Settings.System.AUTO_TIME);
        if (timeSettings.contentEquals("0")) {
            android.provider.Settings.System.putString(
                    this.getContentResolver(),
                    android.provider.Settings.System.AUTO_TIME, "1");
        }
        Date now = new Date(System.currentTimeMillis());
        Log.d("Date", now.toString());

确保在清单中添加权限

代码语言:javascript
运行
复制
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8049912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档