一,项目场景与问题描述
平台:RK3288
系统:Android5.1
客户机器是香港的机柜(编码;HK),使用的是香港的SIM卡, 第一次烧录或者恢复出厂设置,设置–移动网络–接入点名称–APN中可以识别到香港那边的信息,但是都没有选中,需要手动选择,如果更换另一张SIM卡(同一个运营商号码不同)重启就要再次手动选择;
本地测试使用中国移动(4G)的SIM卡,开机时会自动选择中国移动cmnet接入点名称。
二,系统中APN默认配置文件的位置:
系统APN默认的配置来自于 system/etc/apns-conf.xml
这个文件,生成它的地方在在源码vendor/rockchip/common/phone/etc/apns-full-conf.xml
文件中,一般根据项目的不同可能位置不同,找不到直接find搜索下, 在apns-conf.xml中可以看到许多已经存在的apn信息,添加上你需要配置的新的APN即可。
比如客户提供的香港的apn选项:
<apn carrier="3 HK" mcc="454" mnc="03" apn="ipc.lte.three.com.hk" type="default,supl" />
三,开机默认选中配置好的APN:
添加配置好apn之后,重新烧录开机,插入香港的SIM卡,发现 设置–移动网络–接入点名称–APN中有新添加的APN,但是没有默认选中;但是使用移动或者联通会有默认选中功能。可以通过源码修改解决此问题:
packages/apps/Settings/src/com/android/settings/ApnSettings.java中,定位到fillList()方法:
private void fillList() {
...
boolean selectable = ((type == null) || !type.equals("mms"));
pref.setSelectable(selectable);
//add by fy start
//如果name和apn和numeric满足自己配置的条件,就直接setChceked
if("3 HK".equals(name) && "ipc.lte.three.com.hk".equals(apn) && where.contains("45403")){
pref.setChecked();
apnList.addPreference(pref);
Log.d("fy","3 HK");
} else{
//add by fy end
if (selectable) {
if ((mSelectedKey != null) && mSelectedKey.equals(key)) {
pref.setChecked();
}
apnList.addPreference(pref);
} else {
mmsApnList.add(pref);
}
}
...
}