微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > 如何解决在欧洲城市自动 更新时区错误

如何解决在欧洲城市自动 更新时区错误

时间:10-02 整理:3721RD 点击:
欧洲某些运营商的NITZ消息比正常的NITZ消息少一位,缺少的是夏令时参数,在这样的情况下,会造成手机获得的时区错误,通常显示为非洲某时区。

对于缺少dst参数的NITZ消息,我们需要通过其他方式来获取和补充这个参数。这里的修改方法是根据手机的TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC这个属性中的mcc信息,即目前所在国家来判断的。

step1:修改ServiceStateTracker.java
(php?mod=tag&id=6090" target="_blank" class="relatedlink">Frameworks\base\telephony\java\com\android\internal\telephony)

在setTimeFROMNITZString这个方法中,修改dst的申明和定义语句如下:
int dst = (nitzSubs.length >= 8 ) ? Integer.parseInt(nitzSubs[7]) : mccDst( getMcc() ,
c.getTIMEInMillis());

step2:添加获取mcc参数的方法getMcc()

//getMcc方法的定义如下(如果已经有这个函数,不用重复添加):
private int getMcc(){
int mccmnc = 0;
int mcc=0;
if (phone.getMySIMId() == Phone.GEMINI_SIM_1) {
mccmnc = SystemProperties.getInt(TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC, 0);
} else {
mccmnc= SystemProperties.getInt(TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC_2,
0);
}
try {
mcc = mccmnc/100;
} catch (NumberFormatException e) {
Log.e(LOG_TAG, "Error parsing IMSI");
}
return mcc;
}

step3:添加根据mcc参数获取dst参数的方法mccDst()

//mccDst方法的定义如下
private int mccDst(int mcc, long when) {
String tz = MccTable.defaultTimeZoneForMcc(mcc);
if(tz==null)
return 0;
TimeZone timezone = TimeZone.getTimeZone(tz);
if(timezone==null)
return 0;
Date d = new Date(when);
return timezone.inDaylightTime(d)==true?1:0;
}

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

网站地图

Top