Android运营商名字显示规则

来源:互联网 发布:手机视频剪辑软件知乎 编辑:程序博客网 时间:2024/05/21 11:18

可以分为两大类:

(1)网络名称:PLMN(注册的mccmnc对应的网络名称)和SPN(卡中的一个文件:EF_SPN,fid是6F46。读取SPN首先要看看SST中是否有这个栏位)

(2)SIM卡名称

一、首先介绍PLMN

   (1)概念:当前手机注册的mccmnc对应的运营商名称

   (2)显示规则图如下:

              按照优先显示规则优先级别不同,如下做一一介绍:

              (a)Eons

                 1、 Enhanced Operator Name String,也就是Eons,此种方式的名称是存放在EF_PNN(PLMN Network Name, fid: 6FC5)和

                        EF_OPL(Operator PLMN List, fid: 6FC6)中。

                   2、EF_OPL中存放的是LAC和EF_PNN中的Record Identifier,

                         EF_PNN中存放的是Network Name,也就是具体的名称了。

                         如果注册上的网络是HPLMN,那么EF_OPL返回的Record Identifier就是1。

                         如果不是HPLMN的话,就根据LAC在EF_OPL中寻找对应的Record Identifier。然后根据OPL的Record Identifier,在PNN中找对应的

                         Network Name。

                   3、相应代码:sEons = (simRecords != null) ? simRecords.getEonsIfExist(mSS.getOperatorNumeric(),mCellLoc.getLac(), true) : null;


            (b)CPHS ONS  

                1、Common PCN Handset Specification Operator Name String:需要当前注册的是HPLMN网络

                2、 如果SIM中的CPHS ONS的长格式文件(fid:6F14, long name)读取成功,用此当作网络名称。
                      如果SIM中的CPHS ONS的短格式文件(fid:6F18, short name)读取成功,用此当作网络名称。

                3、相应代码:plmn = (simRecords != null) ? simRecords.getSIMCPHSOns() : "";


            (c)  NITZ Operator Name

               1、此名称是由所注册的网络下发给手机的,参考TS22.042。如果网络有下发这个数据给手机,modem会通过”+CIEV: 10”把数据传给AP端,AP端会用                      个数据来当成网络名称,另外AP端还会把这个数据和对应的网络PLMN一同记下来,当之后注册上的网络仍是这个PLMN,这显示的网络名称会                        是这个网络名称。     

              2、/* +CIEV: 10,"PLMN","long_name","short_name" */ :CIEV: 10,"60501","Orange Tn","Orange Tn", 0, 0

              3、具体代码流程如下:


            (d)ROM

                   这一个是存储在手机flash中的,目前的存储方式是xml文件。如果是有打开支持MVNO的option,那么以下xml都依次读取,如果读取到就终

              止往下读了。如果没有MVNO,那么仅仅读取spn-conf.xml。如果没有读取到那么显示plmn号了。 

              Virtual-spn-conf-by-efspn.xml

              Virtual-spn-conf-by-imsi.xml
              Virtual-spn-conf-by-efpnn.xml
              Virtual-spn-conf-by-efgid1.xml
               Spn-conf.xml

              这个分的代码可以参考ril.Java中的 lookupOperatorName()方法和SpnOverride类