android时间自动同步
16lz
2021-01-24
在Android2.3.4系统中,Settings->Date & time->Automatic项打上后,时间会通过网络进行同步,而Android默认使用的是NITZ来获取移动网络时间,需要有移动网络服务商的支持才能使用,而有些Android产品只支持WIFI等无线网络,而不支持移动网络,此时就需要采用SNTP方式来获取网络时间进行同步了,相应需要修改到的文件为
[java] view plain copy
- frameworks/base/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
- frameworks/base/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
需要修改的都是一样的内容,如下:
[java] view plain copy
- 添加如下内容:
- importandroid.net.SntpClient;
- 修改如下内容:
- 把
- privatevoidrevertToNitz(){
- if(Settings.System.getInt(phone.getContext().getContentResolver(),
- Settings.System.AUTO_TIME,0)==0){
- return;
- }
- Log.d(LOG_TAG,"RevertingtoNITZ:tz='"+mSavedTimeZone
- +"'mSavedTime="+mSavedTime
- +"mSavedAtTime="+mSavedAtTime);
- if(mSavedTimeZone!=null&&mSavedTime!=0&&mSavedAtTime!=0){
- setAndBroadcastNetworkSetTimeZone(mSavedTimeZone);
- setAndBroadcastNetworkSetTime(mSavedTime
- +(SystemClock.elapsedRealtime()-mSavedAtTime));
- }
- }
修改为:
[java] view plain copy
- privatevoidrevertToNitz(){
- if(Settings.System.getInt(phone.getContext().getContentResolver(),
- Settings.System.AUTO_TIME,0)==0){
- return;
- }
- Log.d(LOG_TAG,"RevertingtoNITZ:tz='"+mSavedTimeZone
- +"'mSavedTime="+mSavedTime
- +"mSavedAtTime="+mSavedAtTime);
- if(mSavedTimeZone!=null&&mSavedTime!=0&&mSavedAtTime!=0){
- setAndBroadcastNetworkSetTimeZone(mSavedTimeZone);
- setAndBroadcastNetworkSetTime(mSavedTime
- +(SystemClock.elapsedRealtime()-mSavedAtTime));
- return;
- }
- inttryCount=5;
- SntpClientclient=newSntpClient();
- Log.i(LOG_TAG,"revertToNitznewsntpclient");
- for(inti=0;i<tryCount;i++){
- if(client.requestTime("north-america.pool.ntp.org",10000)){
- longcachedNtp=client.getNtpTime();
- longcachedNtpTimestamp=SystemClock.elapsedRealtime();
- Log.i(LOG_TAG,"SntpNtpTime="+cachedNtp);
- setAndBroadcastNetworkSetTime(cachedNtp
- +(SystemClock.elapsedRealtime()-client.getNtpTimeReference()));
- return;
- }
- }
- }
当不支持NITZ获取时间同步时就使用SNTP方式获取时间进行同步。不过使用SNTP方式进行时间同步时不能同步时区,需要自己先去掉自动同步并设置时区后再设置自动同步,这样才能进行网络时间的同步更新。
时间同步 受地区 卡类别 基站 运营商 等影响大部分android手机时间同步都不怎么顺畅
更多相关文章
- Android之三种实现自定义ProgressBar的方式
- Android(安卓)ListView从网络获取图片及文字显示
- Android之封装好的异步网络请求框架
- 网络编程
- Android(安卓)Studio中编码(乱码)问题的解决方案
- Android面试题目之三: 字符串转整形
- 原生CountDownTimer 类实现获取验证码的按钮
- Android(安卓)BaseFragment封装
- Android(安卓)studio 实现简单的视频播放