微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > Android L SIM卡更新语言问题

Android L SIM卡更新语言问题

时间:10-02 整理:3721RD 点击:
[DESCRIPTION]
L上未安装GMS包时, 语言设定情况如下:
(1)系统预置语言, 即在makefile中指定的语言
(2)刷机重启, 如果未插卡, 则系统语言为预置的语言
(3)刷机重启插入SIM卡开机(首次开机), 会自适应为SIM卡的语言, 如首次开机未插入SIM卡, 后面
插入SIM卡开机不会再根据SIM卡自适应语言.
(4)如果有手动设置语言, 以后开机, 不管插入的是哪个国家的卡, 都会显示设置的语言, 不会根据
SIM卡自适应变化.
如果在未安装GMS包的情况下, 首次开机语言未随SIM卡自适应可以参考下面方案解决。
如果下面方法不能解决, 请联系mtk技术人员.
[SOLUTION]
在L上无法通过SIM卡适配语言,或是适配错误语言主要是有下面几个方面原因
1.在android L 上GOOGLE默认安装了GMS包, GMS包中有去设置语言, 所以SIM卡不能再适配语言。
2.未安装GMS包时SIM卡有时也不能适配语言, 原因是在sim卡去自适应语言时, 系统已设置"device_provisioned"的值为true, 所以sim卡放弃更新。
3.通过MCC和MNC没有在MCCTABLE中没有找到对应的语言。
4.SIMRecords中会去读取SIM卡中的EF文件获取国家CODE和语言CODE去更新语言(而国家CODE和语言CODE是错误的)
根据上面几点有以下的解法
1.查看对应LOG
如果出现
MccTable: getLocaleForLanguageCountry: not permitted to update locale
请在userHasPersistedLocale 和isDeviceProvisioned 加入LOG进一步确认问题)
(1) private static boolean userHasPersistedLocale() {
String persistSysLanguage = SystemProperties.get("persist.sys.language", "");
String persistSysCountry = SystemProperties.get("persist.sys.country", "");
Slog.d(LOG_TAG, "userHasPersistedLocale persistSysLanguage ="+persistSysLanguage +"-----persistSysCountry="+persistSysCountry );//
add by mtk
return !(persistSysLanguage.isEmpty() && persistSysCountry.isEmpty());
}
private static boolean isDeviceProvisioned(Context context) {
try {
Slog.d(LOG_TAG, "isDeviceProvisioned="+ Settings.Global.getInt(
context.getContentResolver(), Settings.Global.DEVICE_PROVISIONED) != 0);//add by mtk
return Settings.Global.getInt(
context.getContentResolver(), Settings.Global.DEVICE_PROVISIONED) != 0;
} catch (Settings.SettingNotFoundException e) {
return false;
}
}
(2)如果isDeviceProvisioned 为true 的话那么请将
private static boolean canUpdateLocale(Context context) {
return !(userHasPersistedLocale() || isDeviceProvisioned(context));
}
修改为
private static boolean canUpdateLocale(Context context) {
return !userHasPersistedLocale() ;
}
(3)如果persistSysLanguage 这个打印有值同时去掉GMS包可以更新语言那么是由于GMS包中设置了用户语言导致,如需实现适配SIM卡语言只能去
掉GMS包,如果去掉userHasPersistedLocale()这个判断(不过会导致以后机器语言会根据插入的SIM变化)
2.如果经过第一步骤还是无法适配到对应的语言,同时出现以下LOG
MccTable: updateMccMncConfiguration: mcc=460, mnc=1 (根据SIM 卡不同)
MccTable: getLocaleForLanguageCountry: got a language-only match: de-AT
(这个LOG 表示在sTable中无法根据SIM卡的MCC,MNC获取国家码和语言码)
修改mcctable中的sTable
如 sTable.add(new MccEntry(460,"cn",1,"zh")); //China (People's Republic of)
可以参考FAQ06189 插国外SIM卡,第一次开机语言没有自适应
同时将
if (firstMatch == null) {
firstMatch = l;
}屏蔽掉
3.SIMRecords根据EF文件更新语言。
查看LOG有以下LOG打出
SIMRecords: [SIMRecords] languages fROM sim = de (slot 0)
SIMRecords: [SIMRecords] Setting locale to de_null (slot 0)
MccTable: setSystemLocale: updateLocale config={1.0 ?mcc?mnc de_AT ldltr ?swdp ?wdp ?hdp ?density ?lsize ?long ?orien ?uimode
?night ?touch ?keyb/?/? ?nav/?}
修改
SIMRecords.java中
handleMessage方法中注释掉如下语句:
case EVENT_APP_LOCKED:
// onLocked(); //注释掉此语句从而关掉从SIM卡获取优先语言的feature

谢谢分享   

签到专用楼

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

网站地图

Top