在Android2.3.4系统中,Settings->Date & time->Automatic项打上后,时间会通过网络进行同步,而Android默认使用的是NITZ来获取移动网络时间,需要有移动网络服务商的支持才能使用,而有些Android产品只支持WIFI等无线网络,而不支持移动网络,此时就需要采用SNTP方式来获取网络时间进行同步了,相应需要修改到的文件为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方式进行时间同步时不能同步时区,需要自己先去掉自动同步并设置时区后再设置自动同步,这样才能进行网络时间的同步更新。

更多相关文章

  1. Android中几种常见的定时刷新方式
  2. Wifi 资源整理
  3. 在Android中使用VideoView播放视频
  4. Android(安卓)使用USB与PC通信之ADB方式
  5. Android的OkHttp包中的HTTP拦截器Interceptor用法示例
  6. Android(安卓)NDK开发(七)——现代化开发方式
  7. Android基于DataBinding的一个基础框架
  8. Android学习五 网络编程与handler消息机制
  9. Android(安卓)属性

随机推荐

  1. Android(安卓)重新编译资源文件
  2. Android(安卓)Modules 依赖关系,命令行
  3. Android(安卓)Property Animation 介绍(一
  4. Android隐藏标题栏的方法
  5. Android(安卓)Handler机制总结
  6. Android(安卓)中短信数据库的简单操作
  7. 1.4.1 Android的编码规范
  8. android 背光驱动
  9. 一个很酷的加载loading效果
  10. Android(安卓)OpenSSL分析及实例