一、系统有一个预置语言,即在 makefile 文件中定义的语言; 位置:build/target/product/${Project}.mk 

PRODUCT_LOCALES:= \ en_US \ es_ES \ zh_CN \ zh_TW \ ru_RU \ pt_BR \ fr_FR \ de_DE \ tr_TR \ it_IT \ in_ID \ ms_MY \ th_TH \ vi_VN \ hdpi \ mdpi

第一行即为预置语言,其它为系统支持的语言种类。 当download到手机时,预置语言会被赋给 SystemProperties 里面的变量 ro.product.locale.language 


二、刷机过后,开机重启,如果未插卡,系统语言为预置的语言,插入SIM卡过后,系统语言根据 SIM 卡来改变; 当 SIM 卡准备好后,Phone 中的类 SIMRecords 会从 SIM 卡中读取 IMSI,然后调用 MccTable 的 updateMccMncConfiguration 函数从 IMSI 中获取 MCC 和 MNC,然后从 MCC 通过转换表得到 Locale,再调用 ActivityManagerService 来更新系统语言。 


三、拔掉SIM卡过后,系统语言还原为预置的语言; 开机过程中,在 AndroidRuntime.cpp 文件的函数readLocale 中: 


static void readLocale(char* language, char* region) { char propLang[PROPERTY_VALUE_MAX], propRegn[PROPERTY_VALUE_MAX]; 
property_get("persist.sys.language", propLang, ""); property_get("persist.sys.country", propRegn, ""); if (*propLang == 0 && *propRegn == 0) { /* Set to ro properties, default is en_US */ property_get("ro.product.locale.language", propLang, "en"); property_get("ro.product.locale.region", propRegn, "US"); } strncat(language, propLang, 2); strncat(region, propRegn, 2); //LOGD("language=%s region=%s\n", language, region); } 
首先会从 SystemProperties 变量 persist.sys.language 中去读,如果用户没有在 Settings 里面设置 Locale,这个值为 null, 然后就会去读   ro.product.locale.language 的值,即系统预制语言。 


四、如果用户在 Settings 里面手动设置了语言,以后系统语言会为设置后的语言,无论插入什么卡,系统语言不会变,一直为用户手动设置后的语言。 如果用户在 Settings 里面手动设置了语言,则 persist.sys.language 不为 null, 开机时就会去读这个值,并设为系统语言。

更多相关文章

  1. Android获取系统储存以及内存信息的方法(一)
  2. Android中使用系统相机进行拍照并获取高清照片(一)
  3. 笔记-系统源码常用的Content Provider
  4. Android(安卓)Audio系统之RingerMode
  5. Android(安卓)NotificationManager简读
  6. Android(安卓)7.0修改系统时间
  7. Android开机自启动+屏蔽系统功能
  8. 32位机器Ubuntu系统编译android 内核注意修改点
  9. (转载)Android应用程序签名系统的签名(SignApk.jar)

随机推荐

  1. 使用delphi 开发多层应用(十三)使用Basic4a
  2. (转载)Android下Affinities和Task
  3. Android中称为四大组件
  4. activity 生命周期
  5. 开源阅读器FBReader Android版本的编译
  6. android瀑布流
  7. android bionic缺失pthread_cancel的解决
  8. Android四大组件之Activity---生命周期那
  9. Android(安卓)3D旋转动画之Camera 和 Mat
  10. Android中的动画有哪几类?各自的特点和区