Android携帯電話時間自動同期
Android 2.3.4システムでは、Settings->Date&time->Automaticアイテムがオンになると、時間はネットワークを介して同期されますが、AndroidではデフォルトでNITZを使用してモバイルネットワーク時間を取得するため、モバイルネットワークサービス業者のサポートが必要ですが、一部のAndroid製品ではWIFIなどのワイヤレスネットワークのみをサポートし、モバイルネットワークをサポートしないものもあります.このときSNTP方式でネットワーク時間を同期して取得する必要があり、それに応じて変更する必要があるファイルは
修正する必要があるのはすべて同じ内容で、以下の通りです.
次のように変更します.
NITZ取得時間同期がサポートされていない場合はSNTP方式で時間を同期する.ただし,SNTP方式で時間同期を行う場合はタイムゾーンを同期できないため,自動同期を削除してタイムゾーンを設定してから自動同期を設定する必要があり,ネットワーク時間の同期更新を行うことができる.
時間同期は地域カード類別基地局事業者などの影響でandroid携帯電話のほとんどが時間同期がうまくいかない
frameworks/base/telephony/java/com/android/internal/telephony /cdma/CdmaServiceStateTracker.java
frameworks/base/telephony/java/com /android/internal/telephony/gsm/GsmServiceStateTracker.java
修正する必要があるのはすべて同じ内容で、以下の通りです.
:
import android.net.SntpClient;
:
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方式で時間同期を行う場合はタイムゾーンを同期できないため,自動同期を削除してタイムゾーンを設定してから自動同期を設定する必要があり,ネットワーク時間の同期更新を行うことができる.
時間同期は地域カード類別基地局事業者などの影響でandroid携帯電話のほとんどが時間同期がうまくいかない