zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    asp.net中的控件类型
    string、Empty和null三者的区别
    readonly和const的区别
    接口和抽象类的区别
    asp.net身份认证方式
    什么是继承
    dbca静默管理数据库&数据泵导出导入 大风起
    应用偶发性连接不上Oracle数据库的排查案例 大风起
    开源控件SourceGrid学习(附源代码)
    强类型与弱类型Dataset 与DataTable间的艰难选择
  • 原文地址:https://www.cnblogs.com/kunkka/p/8436151.html
Copyright © 2011-2022 走看看