[FAQ17975]Android M 首次开机不随sim卡自适应语言修改方案
来源:互联网 发布:福州靠谱网络官网 编辑:程序博客网 时间:2024/05/21 18:45
[Description]
Android M上google默认设计是不再随sim卡自适应语言。如想要修改可参考如下方案。
[Solution]
不能更新的原因是在update config时Android M上去掉了对locale改变的update, 按如下方法改成与Android L上一致即可。如果修改之后仍不能自适应语言,请在修改之后再参考FAQ14489 Android L sim卡自适应语言问题 的修改方法。
/frameworks/opt/telephony/src/java/com/android/internal/telephony/MccTable.java
public static void updateMccMncConfiguration(Context context, String mccmnc,
boolean fromServiceState) {
Slog.d(LOG_TAG, "updateMccMncConfiguration mccmnc='" + mccmnc + "' fromServiceState=" + fromServiceState);
if (Build.IS_DEBUGGABLE) {
String overrideMcc = SystemProperties.get("persist.sys.override_mcc");
if (!TextUtils.isEmpty(overrideMcc)) {
mccmnc = overrideMcc;
Slog.d(LOG_TAG, "updateMccMncConfiguration overriding mccmnc='" + mccmnc + "'");
}
}
if (!TextUtils.isEmpty(mccmnc)) {
int mcc, mnc;
String defaultMccMnc = TelephonyManager.getDefault().getSimOperatorNumeric();
Slog.d(LOG_TAG, "updateMccMncConfiguration defaultMccMnc=" + defaultMccMnc);
//Update mccmnc only for default subscription in case of MultiSim.
// if (!defaultMccMnc.equals(mccmnc)) {
// Slog.d(LOG_TAG, "Not a Default subscription, ignoring mccmnc config update.");
// return;
// }
try {
mcc = Integer.parseInt(mccmnc.substring(0,3));
mnc = Integer.parseInt(mccmnc.substring(3));
} catch (NumberFormatException e) {
Slog.e(LOG_TAG, "Error parsing IMSI: " + mccmnc);
return;
}
Slog.d(LOG_TAG, "updateMccMncConfiguration: mcc=" + mcc + ", mnc=" + mnc);
Locale locale = null; //添加这行
if (mcc != 0) {
setTimezoneFromMccIfNeeded(context, mcc);
locale = getLocaleFromMcc(context, mcc); //添加这行
}
if (fromServiceState) {
setWifiCountryCodeFromMcc(context, mcc);
} else {
// from SIM
try {
Configuration config = new Configuration();
boolean updateConfig = false;
if (mcc != 0) {
config.mcc = mcc;
config.mnc = mnc == 0 ? Configuration.MNC_ZERO : mnc;
updateConfig = true;
}
if (locale != null) { //添加这行
config.setLocale(locale); //添加这行
updateConfig = true; //添加这行
} //添加这行
if (updateConfig) {
Slog.d(LOG_TAG, "updateMccMncConfiguration updateConfig config=" + config);
ActivityManagerNative.getDefault().updateConfiguration(config);
} else {
Slog.d(LOG_TAG, "updateMccMncConfiguration nothing to update");
}
} catch (RemoteException e) {
Slog.e(LOG_TAG, "Can't update configuration", e);
}
}
} else {
if (fromServiceState) {
// an empty mccmnc means no signal - tell wifi we don't know
setWifiCountryCodeFromMcc(context, 0);
}
}
}
public static void updateMccMncConfiguration(Context context, String mccmnc,
boolean fromServiceState) {
Slog.d(LOG_TAG, "updateMccMncConfiguration mccmnc='" + mccmnc + "' fromServiceState=" + fromServiceState);
if (Build.IS_DEBUGGABLE) {
String overrideMcc = SystemProperties.get("persist.sys.override_mcc");
if (!TextUtils.isEmpty(overrideMcc)) {
mccmnc = overrideMcc;
Slog.d(LOG_TAG, "updateMccMncConfiguration overriding mccmnc='" + mccmnc + "'");
}
}
if (!TextUtils.isEmpty(mccmnc)) {
int mcc, mnc;
String defaultMccMnc = TelephonyManager.getDefault().getSimOperatorNumeric();
Slog.d(LOG_TAG, "updateMccMncConfiguration defaultMccMnc=" + defaultMccMnc);
//Update mccmnc only for default subscription in case of MultiSim.
// if (!defaultMccMnc.equals(mccmnc)) {
// Slog.d(LOG_TAG, "Not a Default subscription, ignoring mccmnc config update.");
// return;
// }
try {
mcc = Integer.parseInt(mccmnc.substring(0,3));
mnc = Integer.parseInt(mccmnc.substring(3));
} catch (NumberFormatException e) {
Slog.e(LOG_TAG, "Error parsing IMSI: " + mccmnc);
return;
}
Slog.d(LOG_TAG, "updateMccMncConfiguration: mcc=" + mcc + ", mnc=" + mnc);
Locale locale = null; //添加这行
if (mcc != 0) {
setTimezoneFromMccIfNeeded(context, mcc);
locale = getLocaleFromMcc(context, mcc); //添加这行
}
if (fromServiceState) {
setWifiCountryCodeFromMcc(context, mcc);
} else {
// from SIM
try {
Configuration config = new Configuration();
boolean updateConfig = false;
if (mcc != 0) {
config.mcc = mcc;
config.mnc = mnc == 0 ? Configuration.MNC_ZERO : mnc;
updateConfig = true;
}
if (locale != null) { //添加这行
config.setLocale(locale); //添加这行
updateConfig = true; //添加这行
} //添加这行
if (updateConfig) {
Slog.d(LOG_TAG, "updateMccMncConfiguration updateConfig config=" + config);
ActivityManagerNative.getDefault().updateConfiguration(config);
} else {
Slog.d(LOG_TAG, "updateMccMncConfiguration nothing to update");
}
} catch (RemoteException e) {
Slog.e(LOG_TAG, "Can't update configuration", e);
}
}
} else {
if (fromServiceState) {
// an empty mccmnc means no signal - tell wifi we don't know
setWifiCountryCodeFromMcc(context, 0);
}
}
}
阅读全文
0 0
- [FAQ17975]Android M 首次开机不随sim卡自适应语言修改方案
- Android M 首次开机不随sim卡自适应语言修改方案
- [FAQ19122]Android N 首次开机不随sim卡自适应语言修改方案
- Android 如何修改Sim卡语言自适应 M
- Android 如何修改Sim卡语言自适应
- Android 如何修改Sim卡语言自适应
- Android 如何修改Sim卡语言自适应
- Android 如何修改Sim卡语言自适应
- [FAQ14489]Android L SIM卡更新语言问题, 自适应为SIM卡的语言问题
- Android L SIM卡自适应更新语言的问题
- 【google M】开机SIM卡信息的初始化
- (M)SIM卡开机流程分析之主线分析
- (M)SIM卡开机流程分析之SPN加载
- Android 首次开机优化
- Android 首次开机优化
- Android SIM多次热插拔,某次插入,不识别SIM卡
- [FAQ18143]L/M版本首次/非首次开机时间优化
- 87.android SIM开机监听
- (原创)python的字符串读写和二进制读写
- C++ 动态类型比较
- Jmeter报告优化之New XSL stylesheet
- Java新手编程入门
- #jquery 和 animate 封装一个带动画的弹框
- [FAQ17975]Android M 首次开机不随sim卡自适应语言修改方案
- linux/android代码中对于不同项目中conf、dts、defconfig文件的处理方法
- 用R做中文LDA主题模型可视化分析
- ThreadPoolTaskExecutor线程使用,及线程池配置
- 2017.10.17离线赛总结
- java格式化日期的写法
- sublime text3 使用小技巧
- 第八周项目2-对称矩阵压缩存储的实现与应用-
- 史上最难的一道Java面试题 (分析篇)