我想在我的应用程序中找到一种方法,将日期和时间与外部源提供的内容同步。
我不想使用电话时间,因为我可能会得到一个可能5分钟左右的实时。增加或少于5分钟= 10分钟!
我听说过GPS卫星或网络天线中的时间信息。
我尝试过使用System.getCurrentTime,但是我得到了设备的当前信息,所以,如果我的设备提前5分钟设置,它就会显示错误的时间。
编辑
想问一个简短的问题:这次我要怎么做?
发布于 2011-11-21 15:31:16
我不知道,但我觉得这个问题很有趣。所以我挖了机器人密码..。谢谢开源:)
您显示的屏幕是DateTimeSettings
。复选框“使用网络提供的值”与共享首选项String KEY_AUTO_TIME = "auto_time";
以及Settings.System.AUTO_TIME
相关联。
在2个网络mAutoTimeObserver
s:GsmServiceStateTracker
和CdmaServiceStateTracker
中,一个名为GsmServiceStateTracker
的观测值可以观察到这个设置。
当设置变为真时,这两个实现都调用一个名为revertToNitz()
的方法。显然,NITZ相当于载波世界中的NTP。
底线:感谢revertToNitz()
,您可以将时间设置为运营商提供的值。不幸的是,我还没有找到一种获取网络时间的机制。如果您真的需要这样做,恐怕您必须复制这些ServiceStateTracker
的实现,捕捉框架提出的意图(我想),并向mSavedTime
添加一个getter。
发布于 2013-02-06 03:19:15
从http://commons.apache.org/net/download_net.cgi获取库
//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小时之前,您可以看到不同之处。
local time :
System.currentTimeMillis()
timeInfo.getReturnTime()
timeInfo.getMessage().getOriginateTimeStamp().getTime()
NTP server time :
timeInfo.getMessage().getReceiveTimeStamp().getTime()
timeInfo.getMessage().getTransmitTimeStamp().getTime()
发布于 2015-04-16 08:07:19
试试下面的代码片段:
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());
确保在清单中添加权限
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
https://stackoverflow.com/questions/8049912
复制相似问题