工作中遇到,国内网络无法自动更新时间的问题,准备研究一下

在百度文库中发现的文章,未知具体来源,尚未实验未知效果

---------------------------------------------------------------------------------------

Android2.3.4系统中,Settings->Date & time->Automatic项打上后,时间会通过网络进行同步,而Android默认使用的是NITZ来获取移动网络时间,需要有移动网络服务商的支持才能使用,而有些Android产品只支持WIFI等无线网络,而不支持移动网络,此时就需要采用SNTP方式来获取网络时间进行同步了,相应需要修改到的文件为frameworks/base/telephony/java/com/android/internal/telephony /cdma/CdmaServiceStateTracker.javaframeworks/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. GitHub 标星 2.5K+!教你通过玩游戏的方式学习 VIM!
  2. Nginx系列教程(六)| 手把手教你搭建 LNMP 架构并部署天空网络电影
  3. Android获取应用信息判断网络连接返回桌面及卸载apk结束进程等的
  4. Android项目打包遇com.android.builder.internal.aapt.v2.Aapt2E
  5. android中TextView分段显示不同颜色,字体,时间
  6. android sqlite用法
  7. Android(安卓)IPV6获取方式
  8. 自定义时间控件
  9. 网络请求框架之Retrofit2.0基本讲解

随机推荐

  1. Android的webview加载本地html、本apk内h
  2. Android(安卓)Studio的功能列举
  3. Android(安卓)ConstraintLayout使用指南
  4. Android(安卓)中的 Service 全面总结(二)
  5. 更改android AVD模拟器创建路径位置
  6. Android(安卓)的第三方报表组件,AChartEng
  7. 【Android】android4.4从图库选择图片,获
  8. Android游戏引擎《Rokon》:主要类和方法的
  9. Android程序反编译
  10. 【读书笔记-《Android游戏编程之从零开始