android获取网络时区_AndroidAutomotive时区更新(2/2)

本文详细介绍了在Android系统中如何获取网络时区,并特别关注了Android Automotive平台上的时区更新过程,为开发者提供实现时区同步的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于在安卓设备的时区校准主要是分两个方面:1)用户手动选择,根据自己实际的地点选择对应时区;2)系统自动更新,前面一篇文章介绍了时区自动更新的源头,本篇文章主要是介绍NITZ和NTP。在手动更新时区时,涉及到时区规则的更新,物理上存在的全球二十四个时区,在逻辑上不是依次按照时区相差一个小时,而是根据政治,宗教等因素逻辑划定了时区。比如中国横跨了几个时区,但都采用北京东八时区统一计时。同时,有些地方还会存在夏令时调整的问题,这就需要平台要具有更新时区规则的能力。时区规则的更新其大概是通过如下方式进行:首先,当一个地区或国家对应时区变化时,IANA(InternetAssigned Numbers Authority)进行数据库的更新并发布;其次,安卓的ODM或者OEM根据时区的更新数据库制作基于对应设备的数据更新模块;最后,相关终端在检测到需要更新时,进行更新模块下载,并重新启动相关应用,更新设备上的时区数据到最新。最后两个过程在设备端主要通过如下四个模块实现:

系统服务

RulesManagerService主要是暂存时区更新数据,默认处于停用状态,需要通过overlay机制打开config_enableUpdateableTimeZoneRules

TimeZoneUpdater

不可更新的系统应用,需要预制到/system/priv-app下面

TimeZoneData

可更新的系统应用,同样是预制到/system/priv-app,其主要目的是获取基于OEM或ODM的最新的时区规则数据

tzdatacheck

一个可执行文件,更新时区规则需要用到的工具

关于这四个模块在的具体实现,大家可以参考安卓源生的代码。在选择自动更新时区时,我们现阶段常用的是NITZ和NTP。首先对于NITZ,这个需要具有基带通信能力,通信运营商会根据IANA提供的最新时区信息,当移动终端注册到运营商网络时,会结合对应基站的小区信息,根据3GPP的规则,发送对应的讯息SystemInformationBlockType16格式的讯息到终端,基带通过解析后会通过RIL_UNSOL_NITZ_TIME_RECEIVED上报一个"yy/mm/dd,hh:mm:ss(+/-)tz,dt"字符串,最终将正确的时间讯息显示到UI中。但如果终端设备的注册基站的小区讯息处于临界点时,UI显示的时间讯息就会出现波动。NITZ的基本流程如下,中间也有一些特别的判断,大家从研究代码中就会发现。

6d22fc8265882f146d0fd17773411027.png

NTP的时间更新主要是用在NITZ不可用(一个是运营商不支持NITZ,一个是终端设置了TelephonyProperties.PROPERTY_IGNORE_NITZ这个属性),但用户还是设置了自动更新时间,就会启用NTP。NTP主要是通过终端注册的互联网连接来获得当下的时间讯息,而获得不到时区讯息,但用户也算获得了准确的时间讯息,至于这一块的代码逻辑大家可以自行参考NewNetworkTimeUpdateService。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值