各个运营商各种默认属性配置,APN配置,海外项目此类需求会比较多。
通过packages/apps/CarrierConfig/src/com/android/carrierconfig/DefaultCarrierConfigService.java来确定XML文件的路径;
因为有的配置文件会直接放在packages/apps/CarrierConfig/asset/下,而有的配置会放在vendor自定义目录下。
我们先找到一个mccmnc的宏,如:
private static final String MCCMNC_PREFIX = "carrier_config_mccmnc_";
然后通过MCCMNC_PREFIX去查找,就能找到在函数onLoadConfig()下,通过该函数加载配置文件。
if (config.isEmpty()) {
// fallback to use mccmnc.xml when there is no carrier id named configuration found.
parser.setInput(getApplicationContext().getAssets().open(
MCCMNC_PREFIX + id.getMcc() + id.getMnc() + ".xml"), "utf-8");
config = readConfigFromXml(parser, id);
}
注意:
每次在CarrierConfig下配置xml文件之后,都需要在AndroidManifest.xml下更新版本号,以免通过OTA升级的用户无法更新:
android:versionCode="1"
android:versionName="1.0.0"
路径:frameworks/base/telephony/java/android/telephony/CarrierConfigManager.java
所有配置项都可以在CarrierConfigManager里面找得到,自定义项也需要在里面定义好,并附上默认值。
如volte开关:carrier_volte_available_bool
public static final String KEY_CARRIER_VOLTE_AVAILABLE_BOOL = "carrier_volte_available_bool";
sDefaults.putBoolean(KEY_CARRIER_VOLTE_AVAILABLE_BOOL, false);
在指定运营商配置里,我们可以给它打开:
如运营商名称配置:carrier_name_string
public static final String KEY_CARRIER_NAME_STRING = "carrier_name_string";
sDefaults.putString(KEY_CARRIER_NAME_STRING, "");
如carrier_config_mccmnc_46000.xml的配置
中国移动
通过TelephonyProvider.java来载入APN配置
路径:packages/providers/TelephonyProvider/src/com/android/providers/telephony/TelephonyProvider.java
查找apns-conf.xml的路径:device/mediatek/config/apns-conf.xml,各个厂商apns存放路径可能不同,但是一般apns-conf.xml文件名不会变;
手机里一般存放在/etc/下和/product/下。
定义:
private static final String PARTNER_APNS_PATH = "etc/apns-conf.xml";
查找PARTNER_APNS_PATH就能找到。
private File getApnConfFile() {
// Environment.getRootDirectory() is a fancy way of saying ANDROID_ROOT or "/system".
File confFile = new File(Environment.getRootDirectory(), PARTNER_APNS_PATH);
File oemConfFile = new File(Environment.getOemDirectory(), OEM_APNS_PATH);
File updatedConfFile = new File(Environment.getDataDirectory(), OTA_UPDATED_APNS_PATH);
File productConfFile = new File(Environment.getProductDirectory(), PARTNER_APNS_PATH);
confFile = pickSecondIfExists(confFile, oemConfFile);
confFile = pickSecondIfExists(confFile, productConfFile);
confFile = pickSecondIfExists(confFile, updatedConfFile);
return confFile;
}
然后在initDatabase()中调用loadApns()来加载XML文件。
如联通的mms APN配置:
如移动的上网apn配置:
这里的default类型为internet类型,即互联网类型。
欢迎大家补充与指正。
转载请注明出处,谢谢~