frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/SpnOverride.java:39: static final String PARTNER_SPN_OVERRIDE_PATH ="etc/spn-conf.xml";
spn-conf.xml
<spnOverrides>
<!-- China -->
<spnOverride numeric="46000" spn="China Mobile" />
<spnOverride numeric="46001" spn="中国联通" />
<spnOverride numeric="46002" spn="China Mobile" />
<spnOverride numeric="46003" spn="China Telecom" />
<spnOverride numeric="46005" spn="China Telecom" />
<spnOverride numeric="46006" spn="China Unicom" />
<spnOverride numeric="46007" spn="China Mobile" />
OPN 是指此SIM卡的提供商名称
PLMN 当前注册的网络提供商名称(ServiceState:setOperatorName(opNames[0], opNames[1], opNames[2]);//从modem得到的数据)
SPN 服务提供商名称(SPN(Service Provider Name)就是当前发行SIM卡的运营商的名称)
OPN和SPN都是提前预置在SIM卡中的网络提供商和服务提供商可能不是同一个企业,所以有事需要单独显示SPN
SpnOverride.java
static final String LOG_TAG = "SpnOverride";
static final String PARTNER_SPN_OVERRIDE_PATH ="etc/spn-conf.xml";
static final String OEM_SPN_OVERRIDE_PATH = "telephony/spn-conf.xml";
loadSpnOverrides(
String numeric = parser.getAttributeValue(null, "numeric");
String data = parser.getAttributeValue(null, "spn");
mCarrierSpnMap.put(numeric, data);
)
String getSpn(String carrier) {
return mCarrierSpnMap.get(carrier);
}
frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/SIMRecords.java:1510:
CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED
handleCarrierNameOverride()
setSpnFromConfig
setServiceProviderName(mSpnOverride.getSpn(carrier));
SimSettings.java
updateCellularDataValues( final SubscriptionInfo sir = mSubscriptionManager.getDefaultDataSubscriptionInfo(); )
SubscriptionManager.java
getDefaultDataSubscriptionInfo( getActiveSubscriptionInfo(getDefaultDataSubscriptionId()); )
getDefaultDataSubscriptionId(
ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub"));
if (iSub != null) {
subId = iSub.getDefaultDataSubId();
}
)
getActiveSubscriptionInfo(
ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub"));
if (iSub != null) {
subInfo = iSub.getActiveSubscriptionInfo(subId, mContext.getOpPackageName());
}
)
public class SubscriptionController extends ISub.Stub
getActiveSubscriptionInfo(
List<SubscriptionInfo> subList = getActiveSubscriptionInfoList(mContext.getOpPackageName());
)
getActiveSubscriptionInfoList(
List<SubscriptionInfo> subList = getSubInfo(SubscriptionManager.SIM_SLOT_INDEX + ">=0", null);
)
getSubInfo(
Cursor cursor = mContext.getContentResolver().query(SubscriptionManager.CONTENT_URI, null, selection, selectionArgs, null);
SubscriptionInfo subInfo = getSubInfoRecord(cursor);
)
adb shell
find data -name "*.db" -print
//data/user_de/0/com.android.providers.telephony/databases/telephony.db
TelephonyProvider.java
telephony.db
SubscriptionController.java
addSubInfoRecord(
Uri uri = resolver.insert(SubscriptionManager.CONTENT_URI, value);
String simCarrierName = mTelephonyManager.getSimOperatorName(subIds[0]);
value.put(SubscriptionManager.DISPLAY_NAME, nameToSet);
)
TelephonyManager.java
getSimOperatorName(
getSimOperatorNameForPhone(getDefaultPhone());
)
getDefaultPhone( SubscriptionManager.getPhoneId(SubscriptionManager.getDefaultSubscriptionId()); )
TelephonyProperties.java
static String PROPERTY_ICC_OPERATOR_ALPHA = "gsm.sim.operator.alpha";
TelephonyManager.java
setSimOperatorName()
setSimOperatorNameForPhone( setTelephonyProperty(phoneId,
TelephonyProperties.PROPERTY_ICC_OPERATOR_ALPHA, name); )
GsmCdmaPhone.java
setOperatorBrandOverride( TelephonyManager.from(mContext).setSimOperatorNameForPhone(
getPhoneId(), iccRecords.getServiceProviderName()); )
IccRecords.java
getServiceProviderName(
String providerName = mSpn;
String brandOverride = card.getOperatorBrandOverride();
brandOverride == null
)
setServiceProviderName(String spn) {
mSpn = spn;
}
SIMRecords.java
handleCarrierNameOverride( setSpnFromConfig(getOperatorNumeric()); )
setSpnFromConfig( setServiceProviderName(mSpnOverride.getSpn(carrier)); )
SpnOverride.java
static final String LOG_TAG = "SpnOverride";
static final String PARTNER_SPN_OVERRIDE_PATH ="etc/spn-conf.xml";
static final String OEM_SPN_OVERRIDE_PATH = "telephony/spn-conf.xml";
String getSpn(String carrier) {
return mCarrierSpnMap.get(carrier);
}
loadSpnOverrides(
String numeric = parser.getAttributeValue(null, "numeric");
String data = parser.getAttributeValue(null, "spn");
mCarrierSpnMap.put(numeric, data);
)