Android源碼開發筆記 WWAN Carrier config的修改


每個運營商的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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM