插入俄罗斯SIM卡获取时区不对
时间:10-02
整理:3721RD
点击:
[DESCRIPTION]
手机插入俄罗斯SIM卡,发现根据MCC获取的时区不是Moscow,
如KK版本插入俄罗斯卡,发现当前时区是Europe/Kaliningrad,L版本则是Europe/Andorra
[SOLUTION]
这是因为系统在通过MCC获取时区时是先获取sim卡所属国家所有的时区列表,然后把列表的
第一个作为返回值。
因为Moscow不是第一位,因此出现上面这种情况,
一般从log中会有这样的下面的关键字打出,
KK版本:
06-03 10:05:27.069 864 864 D GSM : [GSMSST0] pollStateDone: try to fixTimeZone mcc:250 mccTz:Europe/Kaliningrad
06-03 10:05:27.069 864 864 D GSM : [GsmSST0] pollStateDone: using default TimeZone
06-03 10:05:27.069 864 864 D GSM : [GsmSST0] pollStateDone: zone != null zone.getID=Europe/Kaliningrad
android L:
04-14 05:21:51.436 3596 3596 D GSM : [GsmSST1] pollStateDone: try to fixTimeZone mcc:250 mccTz:Europe/Andorra
zone.getID=Europe/Andorra
04-14 05:21:51.436 3596 3596 D GSM : [GsmSST1] pollStateDone: using default TimeZone
04-14 05:21:51.436 3596 3596 D GSM : [GsmSST1] pollStateDone: zone != null zone.getID=Europe/Andorra
这个问题可以修改defaultTimeZoneForMcc返回值解决如下:
MccTable.javaalps\php?mod=tag&id=6090" target="_blank" class="relatedlink">Frameworks\opt\telephony\src\java\com\android\internal\telephony
public static String defaultTimeZoneForMcc(int mcc) {
MccEntry entry;
entry = entryForMcc(mcc);
if (entry == null || entry.mIso == null) {
return null;
} else {
Locale locale;
if (entry.mLanguage == null) {
locale = new Locale("", entry.mIso);
Slog.d(LOG_TAG, "defaultTimeZoneForMcc: mcc=" + mcc + ", mIso=" + entry.mIso);
} else {
locale = new Locale(entry.mLanguage, entry.mIso);
Slog.d(LOG_TAG, "updateMccMncConfiguration: mcc=" + mcc +
", mLanguage=" + entry.mLanguage +
", mIso=" + entry.mIso);
}
String[] tz = TimeZoneNames.forLocale(locale);
if (tz.length == 0) return null;
if(mcc==250) return "Europe/Moscow";////add this line
return tz[0];
手机插入俄罗斯SIM卡,发现根据MCC获取的时区不是Moscow,
如KK版本插入俄罗斯卡,发现当前时区是Europe/Kaliningrad,L版本则是Europe/Andorra
[SOLUTION]
这是因为系统在通过MCC获取时区时是先获取sim卡所属国家所有的时区列表,然后把列表的
第一个作为返回值。
因为Moscow不是第一位,因此出现上面这种情况,
一般从log中会有这样的下面的关键字打出,
KK版本:
06-03 10:05:27.069 864 864 D GSM : [GSMSST0] pollStateDone: try to fixTimeZone mcc:250 mccTz:Europe/Kaliningrad
06-03 10:05:27.069 864 864 D GSM : [GsmSST0] pollStateDone: using default TimeZone
06-03 10:05:27.069 864 864 D GSM : [GsmSST0] pollStateDone: zone != null zone.getID=Europe/Kaliningrad
android L:
04-14 05:21:51.436 3596 3596 D GSM : [GsmSST1] pollStateDone: try to fixTimeZone mcc:250 mccTz:Europe/Andorra
zone.getID=Europe/Andorra
04-14 05:21:51.436 3596 3596 D GSM : [GsmSST1] pollStateDone: using default TimeZone
04-14 05:21:51.436 3596 3596 D GSM : [GsmSST1] pollStateDone: zone != null zone.getID=Europe/Andorra
这个问题可以修改defaultTimeZoneForMcc返回值解决如下:
MccTable.javaalps\php?mod=tag&id=6090" target="_blank" class="relatedlink">Frameworks\opt\telephony\src\java\com\android\internal\telephony
public static String defaultTimeZoneForMcc(int mcc) {
MccEntry entry;
entry = entryForMcc(mcc);
if (entry == null || entry.mIso == null) {
return null;
} else {
Locale locale;
if (entry.mLanguage == null) {
locale = new Locale("", entry.mIso);
Slog.d(LOG_TAG, "defaultTimeZoneForMcc: mcc=" + mcc + ", mIso=" + entry.mIso);
} else {
locale = new Locale(entry.mLanguage, entry.mIso);
Slog.d(LOG_TAG, "updateMccMncConfiguration: mcc=" + mcc +
", mLanguage=" + entry.mLanguage +
", mIso=" + entry.mIso);
}
String[] tz = TimeZoneNames.forLocale(locale);
if (tz.length == 0) return null;
if(mcc==250) return "Europe/Moscow";////add this line
return tz[0];
