1. 프로젝트 시나리오 및 문제 설명
플랫폼: RK3288
시스템: Android5.1
클라이언트 시스템은 홍콩(코드; HK)의 캐비닛으로, 홍콩 SIM 카드를 사용하여 처음으로 공장 설정을 굽거나 복원하고 설정 - 모바일 네트워크 - 액세스 포인트 이름 - APN은 홍콩에 대한 정보를 식별할 수 있습니다. 사이드 , 그러나 그들 중 어느 것도 선택되지 않고 수동 선택이 필요합니다.다른 SIM 카드를 변경하고 (동일한 운영자 번호가 다름) 다시 시작하면 수동으로 다시 선택해야합니다.
로컬 테스트에서는 China Mobile(4G) SIM 카드를 사용하며, 이 SIM 카드를 켜면 China Mobile cmnet 액세스 포인트 이름이 자동으로 선택됩니다.
둘째, 시스템에서 APN 기본 구성 파일의 위치:
시스템 APN의 기본 구성은 system/etc/apns-conf.xml
이 파일에서 나오며 소스코드 vendor/rockchip/common/phone/etc/apns-full-conf.xml
파일에서 생성됩니다.일반적으로 프로젝트에 따라 위치가 다를 수 있습니다.찾을 수 없으면 직접 찾을 수 있습니다. apns-conf.xml apn 정보에 기존의 많은 것, 구성해야 하는 새 APN을 추가합니다.
예를 들어 고객이 제공한 홍콩의 apn 옵션은 다음과 같습니다.
<apn carrier="3 HK" mcc="454" mnc="03" apn="ipc.lte.three.com.hk" type="default,supl" />
3. 시작할 때 구성된 APN이 기본적으로 선택됩니다.
apn 추가 및 구성 후 부팅을 다시 하고 홍콩의 SIM 카드를 삽입하고 설정-모바일 네트워크-액세스 포인트 이름-APN에 새로 추가된 APN이 있지만 기본적으로 선택되어 있지 않음 ; 그러나 China Mobile 또는 China Unicom 기능을 사용할 때 기본적으로 선택됩니다. 이 문제는 소스 코드를 수정하여 해결할 수 있습니다.
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);
}
}
...
}