• 虚拟运营商与实体运营商的apn匹配逻辑


    如下为apn匹配相关代码,从代码可知,平台apn匹配逻辑为:先匹配虚拟运营商apn,如果不满足再匹配实体运营商apn。
    注意:如果插入虚拟运营商的卡,也配置了对应虚拟运营商的apn,但是只配置了一部分,例如没有配置用于上网的default类型apn,则会出现不能上网的问题。根据代码逻辑,只要配置了虚拟运营商apn就会匹配虚拟运营商apn,这时即使配置了实体运营商对应的default类型apn也是不会走该部分逻辑的。
    /packages/providers/TelephonyProvider/src/com/android/providers/telephony/TelephonyProvider.java

    4038 // Separate the result into MatrixCursor
    4039 while (ret.moveToNext()) {
    4040 List data = new ArrayList<>();
    4041 for (String column : columnNames) {
    4042 data.add(ret.getString(ret.getColumnIndex(column)));
    4043 }
    4044
    4045 boolean isCurrentSimOperator;
    4046 final long identity = Binder.clearCallingIdentity();
    4047 try {
    4048 isCurrentSimOperator = tm.matchesCurrentSimOperator(
    4049 ret.getString(numericIndex),
    4050 getMvnoTypeIntFromString(ret.getString(mvnoIndex)),
    4051 ret.getString(mvnoDataIndex));
    4052 } finally {
    4053 Binder.restoreCallingIdentity(identity);
    4054 }
    4055
    4056 boolean isMVNOAPN = !TextUtils.isEmpty(ret.getString(numericIndex))
    4057 && isCurrentSimOperator;
    4058 boolean isMNOAPN = !TextUtils.isEmpty(ret.getString(numericIndex))
    4059 && ret.getString(numericIndex).equals(mccmnc)
    4060 && TextUtils.isEmpty(ret.getString(mvnoIndex));
    4061 boolean isCarrierIdAPN = !TextUtils.isEmpty(ret.getString(carrierIdIndex))
    4062 && ret.getString(carrierIdIndex).equals(String.valueOf(carrierId))
    4063 && carrierId != TelephonyManager.UNKNOWN_CARRIER_ID;
    4064
    4065 if (isMVNOAPN) {
    4066 // 1. The APN that query based on legacy SIM MCC/MCC and MVNO
    4067 currentCursor.addRow(data);
    4068 } else if (isMNOAPN) {
    4069 // 2. The APN that query based on SIM MCC/MNC
    4070 parentCursor.addRow(data);
    4071 } else if (isCarrierIdAPN) {
    4072 // The APN that query based on carrier Id (not include the MVNO or MNO APN)
    4073 carrierIdCursor.addRow(data);
    4074 }

  • 相关阅读:
    线上又出问题了!又是特殊场景,哎呀,当时怎么没有想到!
    使用Lua编写Wireshark解析ProtoBuf插件
    10.1 Shiro(简介)
    第二十一次CCF计算机软件能力认证
    【MySQL--->视图】
    第3章:搜索与图论【AcWing】
    【数据结构】排序详解二
    JavaScript【Array.isArray()、push()/pop()、shift()/unshift()、join()、concat()、reverse() 、slice()】(六)
    sql13
    企业数字化转型架构专业名词积累
  • 原文地址:https://blog.csdn.net/bestwu0666/article/details/125636720