Android运营商名称显示之PLMN与SPN

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lf12345678910/article/details/54316189

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);

)

猜你喜欢

转载自blog.csdn.net/lf12345678910/article/details/54316189
今日推荐