SubscriptionInfoUpdater:SIM1 hot plug out

Android的时间更新分成2种,一种是走运营商协议的NITZ,另外一种是走网络时钟的SNTP。 
SNTP是简单网络时间协议(Simple Network Time protocol)的简称

在Android2.3.4系统中,Settings->Date & time->Automatic项打上后,时间会通过网络进行同步,而Android默认使用的是NITZ来获取移动网络时间,需要有移动网络服务商的支持才能使用,而有些Android产品只支持WIFI等无线网络,而不支持移动网络,此时就需要采用SNTP方式来获取网络时间进行同步了

   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 4.0版本上,通过网络同步时间有两种方式:NITZ和NTP,它们使用的条件不同,可以获取的信息也不一样;勾选这个功能后,手机首先会尝试NITZ方式,若获取时间失败,则使用NTP方式 
(1)NITZ(network identity and time zone)同步时间 
NITZ是一种GSM/WCDMA基地台方式,必须插入SIM卡,且需要operator支持;可以提供时间和时区信息。中国大陆运营商基本是不支持的。 
(3)NTP(network time protocol)同步时间 
NTP在无SIM卡或operator不支持NITZ时使用,单纯通过网络(GPRS/WIFI)获取时间,只提供时间信息,没有时区信息(因此在不支持NITZ的地区,自动获取时区功能实际上是无效的)。NTP还有一种缓存机制:当前成功获取的时间会保存下来,当用户下次开启自动更新时间功能时会结合手机clock来进行时间更新。这也是没有任何网络时手机却能自动更新时间的原因。此外,因为NTP是通过对时的server获取时间,当同步时间失败时,可以检查一下对时的server是否有效,并替换为其他server试一下。

移动网络类型

GPRS 
EDGE 
UMTS 
HSPAP

NITZ

frameworks/opt/telephony/src/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java 
setAndBroadcastNetworkSetTimeZone(String zoneId){ 
alarm.setTimeZone(zoneId); 
Intent intent = new Intent(TelephonyIntents.ACTION_NETWORK_SET_TIMEZONE); 
mPhone.getContext().sendStickyBroadcastAsUser(intent, UserHandle.ALL); 
}

private ContentObserver mAutoTimeObserver = new ContentObserver(new Handler()) { 
@Override 
public void onChange(boolean selfChange) { 
Rlog.i("GsmServiceStateTracker", "Auto time state changed"); 
revertToNitzTime(); 

}; 
private ContentObserver mAutoTimeZoneObserver = new ContentObserver(new Handler()) { 
@Override 
public void onChange(boolean selfChange) { 
Rlog.i("GsmServiceStateTracker", "Auto time zone state changed"); 
revertToNitzTimeZone(); 

};

if (mSavedTimeZone != null) { 
setAndBroadcastNetworkSetTimeZone(mSavedTimeZone); 

saveNitzTimeZone(String mSavedTimeZone); 
mCi.setOnNITZTime(this, EVENT_NITZ_TIME, null); 
pollStateDone();

frameworks/base/core/java/android/app/AlarmManager.java 
setTimeZone(String timeZone)

frameworks/base/services/core/java/com/android/server/AlarmManagerService.java 
setTimeZoneImpl 
String current = SystemProperties.get(TIMEZONE_PROPERTY); 
if (current == null || !current.equals(zone.getID())) { 
SystemProperties.set(TIMEZONE_PROPERTY, zone.getID()); 

Intent intent = new Intent(Intent.ACTION_TIMEZONE_CHANGED);

getContext().sendBroadcastAsUser(intent, UserHandle.ALL);

package/app/Settings/src/com/android/setttings/DateTimeSettings.java

filter.addAction(Intent.ACTION_TIMEZONE_CHANGED); 
getActivity().registerReceiver(mIntentReceiver, filter, null, null);

updateTimeAndDateDisplay(activity);

packages/apps/Settings/src/com/android/settings/ZonePicker.java 
onListItemClick(){ 
AlarmManager.setTimeZone(tzid); 
}

网络时间 SNTP NITZ相关推荐

  1. 【RL-TCPnet网络教程】第30章 RL-TCPnet之SNTP网络时间获取

    第30章      RL-TCPnet之SNTP网络时间获取 本章节为大家讲解RL-TCPnet的SNTP应用,学习本章节前,务必要优先学习第29章的NTP基础知识.有了这些基础知识之后,再搞本章节会 ...

  2. CUBEMX配置STM32实现FTP文件传输以及使用SNTP获取网络时间并写入RTC

    CUBEMX配置STM32实现FTP文件传输以及使用SNTP获取网络时间并写入RTC 引言 FTP代码库的移植 Cubemx配置SNTP以及RTC RTC配置方法 SNTP配置方法 FATFS载入RT ...

  3. ESP32-C3 ESP-IDF 配置smartconfig 和 sntp 获取网络时间

    ESP32-C3 ESP-IDF 配置smartconfig 和 sntp 获取网络时间 /* Esptouch exampleThis example code is in the Public D ...

  4. Android 同步网络时间

    分析这个功能点之前先了解一下相关概念: 网络时间协议(英语:Network Time Protocol,NTP)是以分组交换把两台电脑的时钟同步化的网络传输协议.NTP使用UDP端口123作为传输层. ...

  5. 嵌入式的时间概念:GMT,UTC,CST,DST,RTC,NTP,SNTP,NITZ

    GMT,UTC,CST,DST,RTC,NTP,SNTP,NITZ: 嵌入式的时间 ref 嵌入式开发中,几个时间概念? 彻底搞懂UTC时间 NTP协议详解 使用NTP协议获取网络时间戳(C/C++实 ...

  6. 国内可用的NTP服务器地址列表 网络时间 服务器

    NTP网络时间协议简介 NTP协议全称网络时间协议(Network Time Procotol).它的目的是在国际互联网上传递统一.标准的时间.具体的实现方案是在网络上指定若干时钟源网站,为用户提供授 ...

  7. 获取网络时间并刷新本地时间(源码2)

    因为上次那个获取网络时间失效了(使用的是37端口),获取网络时间并刷新本地时间(源码1) 所以网上又找了一份代码,使用的是123端口,虽然没有测试成功,这里也做下记录,估计是本机环境问题,过两天再进行 ...

  8. 8266获取网络时间

    8266获取网络时间 今天第一次用阿里的博客写点东西感受一下.... sntp.sync("ntp1.aliyun.com",function()print("sync ...

  9. Android 系统(214)---Android 7.1.1时间更新NITZ和NTP详解

    Android 7.1.1时间更新NITZ和NTP详解 1.NTP和NITZ简介 最近在项目中遇到手机首次插上移动卡时不能自动更新时间的问题,就特意跟了下Android系统中手机时间更新有两种方式NT ...

最新文章

  1. hdu 1421 搬寝室 (dp)
  2. matlab的多项式拟合,函数求导,画函数曲线
  3. vm 安装jdk1.8_JDK 13:VM.events已添加到jcmd
  4. VMware Fusion8下CentOS7.1 安装vmtools报错kernel header path
  5. Python爬虫入门之Urllib库的基本使用
  6. 多线程join,强制执行完
  7. SignalR介绍与Asp.net
  8. 女程序员在这里落脚啦
  9. 任秀计算机音乐,重磅丨15家主流媒体聚焦全球音乐院校校长交流季
  10. 工作中学习,学习中成长
  11. 使用base64:url 来定义背景图片url
  12. PostgreSQL的JDBC驱动---jdbc的链接数据库
  13. dom影像图形成数字地形图_数字地形图等高线怎么生成(海地软件地形图数字化高层数据层怎么选择,在哪里...)...
  14. 恩尼格玛机(字母转换,水题)
  15. php 公交查询,php公交车线路查询系统
  16. F28335的储存器及其地址分配
  17. 手机投屏电视html,oppor17手机投屏电视的详细操作步骤
  18. 基于MATLAB车牌图像识别的设计与实现
  19. 计算机应用技术移动UI设计方向,周口职业技术学院专科(高职)计算机应用技术(移动UI设计方向)_周口职业技术学院专科(高职)计算机应用技术(移动UI设计方向)简介-查字典学校网...
  20. SpringBoot 中新建一个Controller类,提示从未使用过的解决方法

热门文章

  1. 亚马逊账号可以用无线网登录吗?
  2. Spark部分算子及使用
  3. Linux splint命令
  4. MAX30102脉搏血氧仪和心率传感器(四)血氧+心率完整版(STM32)
  5. rapidjson笔记
  6. Unity_2D游戏实例从零讲起(2)——手游开场动画的实现
  7. python素数算法,Python中的AKS素数算法
  8. Unity相机自由移动脚本
  9. android自定义dialog 全屏,自定义dialog全屏显示
  10. DBeaver 安装