admin管理员组文章数量:1534538
2024年7月13日发(作者:)
Android时间同步
在Android2.3.4系统中,Settings->Date & time->Automatic项打上后,时间会通过网络进行
同步,而Android默认使用的是NITZ来获取移动网络时间,需要有移动网络服务商的支持
才能使用,而有些Android产品只支持WIFI等无线网络,而不支持移动网络,此时就需要
采用SNTP方式来获取网络时间进行同步了,相应需要修改到的文件为
frameworks/base/telephony/java/com/android/internal/telephony
/cdma/和frameworks/base/telephony/java/com
/android/internal/telephony/gsm/这两个文件,需要修改的都是一
样的内容,如下:
添加如下内容:
import ient;
修改如下内容:
把
private void revertToNitz() {
if ((text().getContentResolver(),
_TIME, 0) == 0) {
return;
}
Log.d(LOG_TAG, "Reverting to NITZ: tz='" + mSavedTimeZone
+ "' mSavedTime=" + mSavedTime
+ " mSavedAtTime=" + mSavedAtTime);
if (mSavedTimeZone != null && mSavedTime != 0 && mSavedAtTime != 0) {
setAndBroadcastNetworkSetTimeZone(mSavedTimeZone);
setAndBroadcastNetworkSetTime(mSavedTime
+ (dRealtime() - mSavedAtTime));
}
}
修改为:
private void revertToNitz() {
if ((text().getContentResolver(),
_TIME, 0) == 0) {
return;
}
Log.d(LOG_TAG, "Reverting to NITZ: tz='" + mSavedTimeZone
+ "' mSavedTime=" + mSavedTime
+ " mSavedAtTime=" + mSavedAtTime);
if (mSavedTimeZone != null && mSavedTime != 0 && mSavedAtTime != 0) {
setAndBroadcastNetworkSetTimeZone(mSavedTimeZone);
setAndBroadcastNetworkSetTime(mSavedTime
+ (dRealtime() - mSavedAtTime));
return;
}
int tryCount = 5;
SntpClient client = new SntpClient();
Log.i(LOG_TAG, "revertToNitz new sntpclient");
for(int i = 0; i < tryCount; i++){
if(tTime("", 10000)) {
long cachedNtp = Time();
long cachedNtpTimestamp = dRealtime();
Log.i(LOG_TAG, "Sntp NtpTime = " + cachedNtp);
setAndBroadcastNetworkSetTime(cachedNtp
+ (dRealtime() - TimeReference()));
return;
}
}
}
当不支持NITZ获取时间同步时就使用SNTP方式获取时间进行同步。不过使用SNTP
方式进行时间同步时不能同步时区,需要自己先去掉自动同步并设置时区后再设置自动同
步,这样才能进行网络时间的同步更新。
版权声明:本文标题:android时间同步 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1720824008a844820.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论