spn与plmn,imsi与imei简单记录

首先先来看一台sim卡正常工作的设备的spn和plmn的值。
使用adb shell getprop命令,出现的信息包含gsm.sim.operator.alpha和gsm.operator.alpha。

[gsm.operator.alpha]: [CHINA MOBILE]
[gsm.operator.iso-country]: [cn]
[gsm.operator.isroaming]: [false,false]
[gsm.operator.numeric]: [46000]
[gsm.sim.operator.alpha]: [CMCC]
[gsm.sim.operator.imsi]: [46002xxxxxxxxxx]
[gsm.sim.operator.iso-country]: [cn]
[gsm.sim.operator.numeric]: [46002]
..........
[ril.gsm.imei]: [86843xxxxxxxxxx,86843xxxxxxxxxx]

该信息表明设备的spn值就是CMCC,plmn是CHINA MOBILE。
CMCC :China Mobile Communications Corporation。

SPN :Service Provider Name 。服务提供商名称,就是当前发行SIM卡的运营商的名称。
PLMN :Public Land Mobile Network。注册网络运营商名称。就是当前注册使用的网络名称。

那么当前设备的信息为什么是这样的呢?
可以通过打印radio log去查看。
adb logcat -b radio -v time > radio.txt
log中部分日志如下。

01-13 10:36:48.696 D/SST     ( 2458): showSpn:false spn:null showPlmn:true plmn:CHINA MOBILE rule:2
01-13 10:36:48.696 D/TelephonyManager( 2458): setTelephonyProperty: success phoneId=0 property=gsm.operator.alpha value: CHINA MOBILE propVal=CHINA MOBILE
..........
01-13 10:36:52.952 D/SIMRecords( 2458): [SIMRecords] getServiceProviderName: no brandOverride, providerName=CMCC
01-13 10:36:52.952 D/SIMRecords( 2458): [SIMRecords] Load EF_SPN: CMCC spnDisplayCondition: 0
01-13 10:36:52.952 D/TelephonyManager( 2458): setTelephonyProperty: success phoneId=0 property=gsm.sim.operator.alpha value: CMCC propVal=CMCC
//vendor\mediatek\proprietary\frameworks\opt\telephony\src\java\com\mediatek\internal\telephony\MtkServiceStateTracker.java
protected void pollStateDone() {
..........
tm.setNetworkOperatorNameForPhone(mPhone.getPhoneId(), mSS.getOperatorAlpha());
..........
}
//frameworks\opt\telephony\src\java\com\android\internal\telephony\uicc\SIMRecords.java
  private void getSpnFsm(boolean start, AsyncResult ar) {
..........
     if (DBG) log("Load EF_SPN: " + spn
                                + " spnDisplayCondition: " + mSpnDisplayCondition);
                        mTelephonyManager.setSimOperatorNameForPhone(
                                mParentApp.getPhoneId(), spn);
..........
}

最后通过调用TelephonyManager中的setNetworkOperatorNameForPhone和setSimOperatorNameForPhone,分别设置了gsm.operator.alpha和gsm.sim.operator.alpha。
在没有漫游的情况下,CMCC 和 CHINA MOBILE的差异只是显示字符的差异,plmn和spn的显示运营商是同一个,即中国移动,这种情况下会比较难理解plmn和spn差异。但是在存在漫游的情况下,会更容易理解plmn和spn的区别。下面是一台使用墨西哥的TELCEL运营商的卡,并在西班牙漫游的设备的使用adb shell getprop命令后获取的部分信息。

[gsm.operator.alpha]: [vodafone ES]
[gsm.operator.iso-country]: [es]
[gsm.operator.isroaming]: [true]
[gsm.operator.numeric]: [21401]
[gsm.ril.uicc.mccmnc]: [334020]
[gsm.sim.operator.alpha]: [TELCEL]
[gsm.sim.operator.iso-country]: [mx]
[gsm.sim.operator.numeric]: [334020]

该设备的plmn值为vodafone ES(英国移动运营商),spn为TELCEL(墨西哥移动运营商)。
因为在漫游的情况下,有的时候sim卡的运营商在当地并没有提供网络支持,需要使用别家运营商的网络,就像上面的情况。
spn简单来说就是sim卡的运营商名称,plmn就是当前注册使用的网络运营商名称。
看完plmn与spn,现在来看imsi与imei。

imsi : International Mobile Subscriber Identity,也就是sim卡的唯一标识号,类似于sim卡的身份证。
imei : International Mobile Equipment Identity,是手机的唯一标识号,相当于手机的身份证。

[gsm.operator.numeric]: [46000]
[gsm.sim.operator.imsi]: [46002xxxxxxxxxx]
[gsm.sim.operator.numeric]: [46002]
..........
[ril.gsm.imei]: [86843xxxxxxxxxx,86843xxxxxxxxxx]

当前sim卡的imsi值为46002xxxxxxxxxx,operator.numeric值为46002。
imsi组成为MCC+MNC+MSIN。
operator.numeric组成是MCC+MNC。这个一般是5位或6位。
下面是一个5位的和6位的numeric对比。

[gsm.sim.operator.numeric]: [46002]
[gsm.sim.operator.numeric]: [334020]

MCC:Mobile Country Code 。MCC的资源由国际电联(ITU)统一分配和管理,唯一识别移动用户所属的国家,共3位,中国为460。
MNC:Mobile NetworkCode 。在中国,中国移动TD系统使用00,中国联通GSM系统使用01,中国移动GSM系统使用02,中国电信CDMA系统使用03

参考链接:
IMSI号和IMEI解释

你可能感兴趣的:(spn与plmn,imsi与imei简单记录)