每個運營商的SIM卡都會有一套對應的MCC/MNC,比如:
中國移動: 460-02
AT&T: 310-410, 311-070
Verizon: 311-480, 310-012
Sprint: 310-120, 311-940
Telstra: 505-01
TMobile: 310-260
插入對應運營商的SIM卡,Android系統會自動load對應MCC/MNC的config給WWAN的app。
比如Google GMS image中的Messages app,短信的設定就會使用對應運營商的配置來決定諸如圖片分辨率,短信長度之類。
要修改Carrier config,有下面三個位置:
1. 默認配置,在frameworks/base/telephony/java/android/telephony/CarrierConfigManager.java
sDefaults.putInt(KEY_MMS_MAX_IMAGE_HEIGHT_INT, 720); sDefaults.putInt(KEY_MMS_MAX_IMAGE_WIDTH_INT, 1280); sDefaults.putInt(KEY_MMS_MAX_MESSAGE_SIZE_INT, 1000 * 1024); sDefaults.putInt(KEY_MMS_MESSAGE_TEXT_MAX_SIZE_INT, 153 * 7); //7 segments, each 153 characters sDefaults.putInt(KEY_MMS_RECIPIENT_LIMIT_INT, 10); sDefaults.putInt(KEY_MMS_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD_INT, -1); sDefaults.putInt(KEY_MMS_SMS_TO_MMS_TEXT_THRESHOLD_INT, -1);
對於各個KEY的詳細說明,可以參考frameworks/base/telephony/java/android/telephony/SmsManager.java
去加載這些默認配置的位置,也在SmsManager.java中:
public static Bundle getMmsConfig(BaseBundle config) { Bundle filtered = new Bundle(); ... filtered.putInt(MMS_CONFIG_MAX_MESSAGE_SIZE, config.getInt(MMS_CONFIG_MAX_MESSAGE_SIZE)); filtered.putInt(MMS_CONFIG_MAX_IMAGE_WIDTH, config.getInt(MMS_CONFIG_MAX_IMAGE_WIDTH)); filtered.putInt(MMS_CONFIG_MAX_IMAGE_HEIGHT, config.getInt(MMS_CONFIG_MAX_IMAGE_HEIGHT)); filtered.putInt(MMS_CONFIG_RECIPIENT_LIMIT, config.getInt(MMS_CONFIG_RECIPIENT_LIMIT)); filtered.putInt(MMS_CONFIG_ALIAS_MIN_CHARS, config.getInt(MMS_CONFIG_ALIAS_MIN_CHARS)); filtered.putInt(MMS_CONFIG_ALIAS_MAX_CHARS, config.getInt(MMS_CONFIG_ALIAS_MAX_CHARS)); filtered.putInt(MMS_CONFIG_SMS_TO_MMS_TEXT_THRESHOLD, config.getInt(MMS_CONFIG_SMS_TO_MMS_TEXT_THRESHOLD)); filtered.putInt(MMS_CONFIG_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD, config.getInt(MMS_CONFIG_SMS_TO_MMS_TEXT_LENGTH_THRESHOLD)); filtered.putInt(MMS_CONFIG_MESSAGE_TEXT_MAX_SIZE, config.getInt(MMS_CONFIG_MESSAGE_TEXT_MAX_SIZE)); filtered.putInt(MMS_CONFIG_SUBJECT_MAX_LENGTH, config.getInt(MMS_CONFIG_SUBJECT_MAX_LENGTH)); ... return filtered; }
2. 各個運營商MCC/MNC定義的config,在packages/apps/CarrierConfig/assets/
可以看到后綴都是各個MCC/MNC的組合,要修改對應運營商的,可以在其對應的xml中修改。
3. 手機廠商Vendor定義的config,在packages/apps/CarrierConfig/res/xml/vendor.xml(一般overlay到device/下面)
分為兩部分,一是全體設置,二是針對運營商設置。
<carrier_config> <boolean name="apn_expand_bool" value="true" /> <boolean name="world_phone_bool" value="false" /> <boolean name="allow_adding_apns_bool" value="true" /> ...... </carrier_config> <carrier_config mcc="204" mnc="04"> <boolean name="carrier_volte_available_bool" value="true" /> <boolean name="carrier_vt_available_bool" value="true" /> <boolean name="carrier_wfc_ims_available_bool" value="true" /> </carrier_config>
三者修改都可以生效,但是會有優先級:vendor.xml > 運營商MCC/MNC.xml > CarrierConfigManager.java