微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > 如何解决插卡开机自适应时区错误的问题

如何解决插卡开机自适应时区错误的问题

时间:10-02 整理:3721RD 点击:
1 自适应时区介绍及问题分析
mtk平台手机在download完后,首次开机如果插有SIM卡,会根据SIM卡进行时区和语言的自适应,
比如,项目的默认语言是英语,默认时区是0时区,插中国移动(46000)卡开机,在进入android之后
,会看到界面语言变成了简体中文,时区变成GMT+8 北京时区.
但是在某些情况下,自适应的时区可能是错误的,主要分为2种情况:1种是自适应的时区为0时区,另
一种是非0的错误时区.这两种问题的原因不同,但是解决方法是类似的.
根据SIM卡自适应时区的流程如下:
MccTable.Java -> 根据mcc获取country code
zoneinfo64.txt -> 获取country code在数组中的index值(数组)
zoneinfo64.txt -> 根据index值获取对应的timezone id(数组)
MccTable.java -> 返回id[0]为自适应的时区
对于自适应时区为0时区的情况,原因是zoneinfo64.txt这个文件中的某些时区id是非ISO标准的
,在Android中无法获取该时区的相关信息,就会返回默认的GMT+0的时区,下面会以【插阿根廷(
72207)卡时区自适应时区为0时区】为例进行说明。
对于非0但错误的时区,原因是该国家有多个时区,而在zoneinfo64.txt中,时区是按字母排序的,
所以得到的该国家的第一个时区是字母排序靠前的时区,而不是首都所在的时区.这种情况目前只有
在俄罗斯测试出现过,因此以【插俄罗斯SIM卡自适应时区不是Moscow】为例进行说明。
2 插阿根廷(72207)卡时区自适应时区为0时区
从插卡匹配的代码流程来看,mcc为722时返回时区id为AGT,这个时区和Buenos_Aires是使用的
一个时区,但是这个时区ID是缩写,非ISO标准,所以时区数据库里面没有,因而会找不到,就会返
回0时区.
解决方法:让mcc为722时,MccTable中,直接返回时区Buenos_Aires,即做如下修改:
文件:
php?mod=tag&id=6090" target="_blank" class="relatedlink">Frameworks\base\telephony\java\com\android\internal\telephony\MccTable.jav
a
函数:publicstaticStringdefaultTimeZoneForMcc(int mcc)
代码:
returntz[0];
修改为:
if(mcc==722&&tz.length>1)
returntz[1];
else
returntz[0];
3 插俄罗斯卡自适应时区不是Moscow
问题描述:插俄罗斯SIM卡首次开机,时区根据SIM卡改变,但是时区没有变成GMT+4时区
(Moscow),而是变成了GMT+12时区(Anadyr)。
问题原因:在zoneinfo64.txt这个时区的索引文件中,各个国家和地区的城市顺序是按照字母顺
序排列的,根据SIM卡查找,会返回该国家排序靠前的城市。每个国家和地区都有多个城市,有的
对应不同的时区。有的是同一个时区,俄罗斯属于不同城市可能属于不同时区,而Anadyr是
GMT+12时区的.
解决方案:mcc为250时,返回Moscow时区的id。
文件:
frameworks\base\telephony\java\com\android\internal\telephony\MccTable.jav
a
函数:publicstaticStringdefaultTimeZoneForMcc(int mcc)
代码:
returntz[0];
修改为:
if(mcc==250&&tz.length>13)
returntz[13];
else
returntz[0];

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top