Android 运营商与APN配置简介

1 场景

各个运营商各种默认属性配置,APN配置,海外项目此类需求会比较多。

2 运营商配置方法

2.1 确定配置文件路径

通过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"

2.2 关键配置类CarrierConfigManager

路径: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的配置



    
        中国移动
    

3 APN 配置方法

3.1 确定apns-conf.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文件。

3.2 常用配置

如联通的mms APN配置:

  

如移动的上网apn配置:

  

这里的default类型为internet类型,即互联网类型。


欢迎大家补充与指正。
转载请注明出处,谢谢~

你可能感兴趣的:(运营商与APN配置,android,java,android,studio)