Android U 软件fota版本后APN更新逻辑
代码逻辑
TelephonyProvider 对APN数据库进行创建和更新。
- onCreate() 创建 DatabaseHelper
- 根据isNewBuild确定是首次生成还是重置APN等场景
- 首次开机或fota版本会执行updateApnDb()和addAllApnSharedPrefToLocalLog()以创建数据库
- updateApnDb:用户修改过的APN会被保存,根据IS_UNEDITED 筛选数据
- addAllApnSharedPrefToLocalLog:
相关字段
CARRIERS_UNIQUE_FIELDS_DEFAULTS 的unique 字段
private static final Map<String, String> CARRIERS_UNIQUE_FIELDS_DEFAULTS = new HashMap();static {// Columns not included in UNIQUE constraint: name, current, edited, user, server, password,// authtype, type, protocol, roaming_protocol, sub_id, modem_cognitive, max_conns,// wait_time, max_conns_time, mtu, mtu_v4, mtu_v6, bearer_bitmask, user_visible,// network_type_bitmask, skip_464xlat, lingering_network_type_bitmask, always_onCARRIERS_UNIQUE_FIELDS_DEFAULTS.put(NUMERIC, "");CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(MCC, "");CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(MNC, "");CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(APN, ""); //APN不一样是不会合并的,CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(PROXY, "");CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(PORT, "");CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(MMSPROXY, "");CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(MMSPORT, "");CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(MMSC, "");CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(CARRIER_ENABLED, "1");CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(BEARER, "0");CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(MVNO_TYPE, "");CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(MVNO_MATCH_DATA, "");CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(PROFILE_ID, "0");CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(PROTOCOL, "IP");CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(ROAMING_PROTOCOL, "IP");CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(USER_EDITABLE, "1");CARRIERS_UNIQUE_FIELDS_DEFAULTS.put(OWNED_BY, String.valueOf(OWNED_BY_OTHERS));CARRIERS_UNIQUE_FIELDS