在Android2.3.4系統(tǒng)中,Settings->Date & time->Automatic項打上后,時間會通過網(wǎng)絡進行同步,而Android默認使用的是NITZ來獲取移動網(wǎng)絡時間,需要有移動網(wǎng)絡服務商的支持才能使用,而有些Android產(chǎn)品只支持WIFI等無線網(wǎng)絡,而不支持移動網(wǎng)絡,此時就需要采用SNTP方式來獲取網(wǎng)絡時間進行同步了,相應需要修改到的文件為frameworks/base/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java和frameworks/base/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java這兩個文件,需要修改的都是一樣的內(nèi)容,如下:
添加如下內(nèi)容:
import android.net.SntpClient;
修改如下內(nèi)容:
把
private void revertToNitz() {
if (Settings.System.getInt(phone.getContext().getContentResolver(),
Settings.System.AUTO_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
+ (SystemClock.elapsedRealtime() - mSavedAtTime));
}
}
修改為:
private void revertToNitz() {
if (Settings.System.getInt(phone.getContext().getContentResolver(),
Settings.System.AUTO_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
+ (SystemClock.elapsedRealtime() - mSavedAtTime));
return;
}
int tryCount = 5;
SntpClient client = new SntpClient();
Log.i(LOG_TAG, "revertToNitz new sntpclient");
for(int i = 0; i < tryCount; i++){
if(client.requestTime("north-america.pool.ntp.org", 10000)) {
long cachedNtp = client.getNtpTime();
long cachedNtpTimestamp = SystemClock.elapsedRealtime();
Log.i(LOG_TAG, "Sntp NtpTime = " + cachedNtp);
setAndBroadcastNetworkSetTime(cachedNtp
+ (SystemClock.elapsedRealtime() - client.getNtpTimeReference()));
return;
}
}
}
當不支持NITZ獲取時間同步時就使用SNTP方式獲取時間進行同步。不過使用SNTP方式進行時間同步時不能同步時區(qū),需要自己先去掉自動同步并設置時區(qū)后再設置自動同步,這樣才能進行網(wǎng)絡時間的同步更新。