有的MVNO卡没有配置过 CarrierConfig及相关 overlay,但是实际运行的时候功能被override了 ,此时可能是因为CarrierConfig用了父类(同MCCMNC等情况)的配置,因此在直接查找对应卡cid或mccmnc+mvno属性时候的CarrierConfig是没办法找到影响功能的配置项的。
frameworks/opt/telephony/src/java/com/android/internal/telephony/ServiceStateTracker.java
AOSP源码getServiceProviderName接口,从CarrierConfig中读取配置是否覆写运营商名称,两个KEY共同控制
- //Android S version example
- //frameworks/opt/telephony/src/java/com/android/internal/telephony/ServiceStateTracker.java
- /**
- * Get the service provider name with highest priority among various source.
- * @return service provider name.
- */
- public String getServiceProviderName() {
- // BrandOverride has higher priority than the carrier config
- String operatorBrandOverride = getOperatorBrandOverride();
- if (!TextUtils.isEmpty(operatorBrandOverride)) {
- return operatorBrandOverride;
- }
-
- String carrierName = mIccRecords != null ? mIccRecords.getServiceProviderName() : "";
- PersistableBundle config = getCarrierConfig();
- if (config.getBoolean(CarrierConfigManager.KEY_CARRIER_NAME_OVERRIDE_BOOL)
- || TextUtils.isEmpty(carrierName)) {
- return config.getString(CarrierConfigManager.KEY_CARRIER_NAME_STRING);
- }
-
- return carrierName;
- }
packages/apps/CarrierConfig/src/com/android/carrierconfig/
DefaultCarrierConfigService.java 中通过loadConfig接口加载出对应卡的配置
加载先后,越后加载的会覆盖前面的

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

- public class DefaultCarrierConfigService extends CarrierService {
-
- private static final String CARRIER_ID_PREFIX = "carrier_config_carrierid_";
- private static final String MCCMNC_PREFIX = "carrier_config_mccmnc_";
- private static final String NO_SIM_CONFIG_FILE_NAME = "carrier_config_no_sim.xml";//无卡配置的文件名
-
- private XmlPullParserFactory mFactory;
-
- public DefaultCarrierConfigService() {
- Log.d(TAG, "Service created");
- mFactory = null;
- }
-
- PersistableBundle loadConfig(XmlPullParser parser, @Nullable CarrierIdentifier id) {
- PersistableBundle config = new PersistableBundle();
- // OEM customizable filter for carrier requirements not related to hardware/vendor SKU.
- String sku = getApplicationContext().getResources().getString(R.string.sku_filter);
-
- if (id == null) {
- try {
- // Load no SIM config if carrier id is not set.
- parser.setInput(getApplicationContext().getAssets().open(
- NO_SIM_CONFIG_FILE_NAME), "utf-8");
- config = readConfigFromXml(parser, null, sku);
-
- // Treat vendor_no_sim.xml as if it were appended to the no sim config file.
- XmlPullParser vendorInput =
- getApplicationContext().getResources().getXml(R.xml.vendor_no_sim);
- PersistableBundle vendorConfig = readConfigFromXml(vendorInput, null, sku);
- config.putAll(vendorConfig);
- }
- catch (IOException|XmlPullParserException e) {
- Log.e(TAG, "Failed to load config for no SIM", e);
- }
-
- return config;
- }
-
- try {
- if (id.getCarrierId() != TelephonyManager.UNKNOWN_CARRIER_ID) {
- PersistableBundle configByCarrierId = new PersistableBundle();
- PersistableBundle configBySpecificCarrierId = new PersistableBundle();
- PersistableBundle configByMccMncFallBackCarrierId = new PersistableBundle();
- TelephonyManager telephonyManager = getApplicationContext()
- .getSystemService(TelephonyManager.class)