• CarrierConfig 加载流程和配置覆盖问题


    问题

    有的MVNO卡没有配置过 CarrierConfig及相关 overlay,但是实际运行的时候功能被override了 ,此时可能是因为CarrierConfig用了父类(同MCCMNC等情况)的配置,因此在直接查找对应卡cid或mccmnc+mvno属性时候的CarrierConfig是没办法找到影响功能的配置项的。

    代码逻辑 

    fw/opt/telephony

    frameworks/opt/telephony/src/java/com/android/internal/telephony/ServiceStateTracker.java

    AOSP源码getServiceProviderName接口,从CarrierConfig中读取配置是否覆写运营商名称,两个KEY共同控制

    • KEY_CARRIER_NAME_OVERRIDE_BOOL
    • KEY_CARRIER_NAME_STRING
    1. //Android S version example
    2. //frameworks/opt/telephony/src/java/com/android/internal/telephony/ServiceStateTracker.java
    3. /**
    4. * Get the service provider name with highest priority among various source.
    5. * @return service provider name.
    6. */
    7. public String getServiceProviderName() {
    8. // BrandOverride has higher priority than the carrier config
    9. String operatorBrandOverride = getOperatorBrandOverride();
    10. if (!TextUtils.isEmpty(operatorBrandOverride)) {
    11. return operatorBrandOverride;
    12. }
    13. String carrierName = mIccRecords != null ? mIccRecords.getServiceProviderName() : "";
    14. PersistableBundle config = getCarrierConfig();
    15. if (config.getBoolean(CarrierConfigManager.KEY_CARRIER_NAME_OVERRIDE_BOOL)
    16. || TextUtils.isEmpty(carrierName)) {
    17. return config.getString(CarrierConfigManager.KEY_CARRIER_NAME_STRING);
    18. }
    19. return carrierName;
    20. }

    CarrierConfig APP 

    packages/apps/CarrierConfig/src/com/android/carrierconfig/

    DefaultCarrierConfigService.java 中通过loadConfig接口加载出对应卡的配置

    • loadConfig -> readConfigFromXml

    加载先后,越后加载的会覆盖前面的

    1. id.getSpecificCarrierId()
    2. id.getCarrierId()
    3. mccmncCarrierId

    ※然后会有优先级加载配置,所以会

    1. public class DefaultCarrierConfigService extends CarrierService {
    2. private static final String CARRIER_ID_PREFIX = "carrier_config_carrierid_";
    3. private static final String MCCMNC_PREFIX = "carrier_config_mccmnc_";
    4. private static final String NO_SIM_CONFIG_FILE_NAME = "carrier_config_no_sim.xml";//无卡配置的文件名
    5. private XmlPullParserFactory mFactory;
    6. public DefaultCarrierConfigService() {
    7. Log.d(TAG, "Service created");
    8. mFactory = null;
    9. }
    10. PersistableBundle loadConfig(XmlPullParser parser, @Nullable CarrierIdentifier id) {
    11. PersistableBundle config = new PersistableBundle();
    12. // OEM customizable filter for carrier requirements not related to hardware/vendor SKU.
    13. String sku = getApplicationContext().getResources().getString(R.string.sku_filter);
    14. if (id == null) {
    15. try {
    16. // Load no SIM config if carrier id is not set.
    17. parser.setInput(getApplicationContext().getAssets().open(
    18. NO_SIM_CONFIG_FILE_NAME), "utf-8");
    19. config = readConfigFromXml(parser, null, sku);
    20. // Treat vendor_no_sim.xml as if it were appended to the no sim config file.
    21. XmlPullParser vendorInput =
    22. getApplicationContext().getResources().getXml(R.xml.vendor_no_sim);
    23. PersistableBundle vendorConfig = readConfigFromXml(vendorInput, null, sku);
    24. config.putAll(vendorConfig);
    25. }
    26. catch (IOException|XmlPullParserException e) {
    27. Log.e(TAG, "Failed to load config for no SIM", e);
    28. }
    29. return config;
    30. }
    31. try {
    32. if (id.getCarrierId() != TelephonyManager.UNKNOWN_CARRIER_ID) {
    33. PersistableBundle configByCarrierId = new PersistableBundle();
    34. PersistableBundle configBySpecificCarrierId = new PersistableBundle();
    35. PersistableBundle configByMccMncFallBackCarrierId = new PersistableBundle();
    36. TelephonyManager telephonyManager = getApplicationContext()
    37. .getSystemService(TelephonyManager.class)
  • 相关阅读:
    配置ssh服务
    JZ85 连续子数组的最大和(二)
    【日常总结】java JSON 转 实体类 (含多层嵌套)
    Leetcode 242:有效的字母异位词
    Vue项目引入腾讯地图,实现可以根据关键词搜出相关位置,并定位到该位置
    物联网协议之MQTT
    Spring Cloud - 手写 Gateway 源码,实现自定义局部 FilterFactory
    Electron项目中将CommonJS改成使用ES 模块(ESM)语法preload.js加载报错
    3.1 模板测试与深度测试(Stencil Test & Z Test)
    助力,NTP网络时间服务器(GPS北斗时钟)助力精准大数据
  • 原文地址:https://blog.csdn.net/qq_38666896/article/details/138075696