一 网络名称显示这部分比较复杂,Spec对这也有明确的规定,根据其优先级由高往低介绍(其优先级参考TS 22.101),
1.       Enhanced Operator Name String,也就是Eons。此种方式的名称是存放在EF_PNN(PLMN Network Name, fid: 6FC5)和EF_OPL(Operator PLMN List, fid: 6FC6)中。
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。
这里需要声明一下,Record Identifier是基于1的,而EF_PNN的记录是基于0的。也就是说,Record Identifier是1,那匹配的是EF_PNN中的第0条记录。 这个分的代码可以参考SIMRecords.java中的getEonsIfExist()方法
 
2.       Common PCN Handset Specification Operator Name String,也就是CPHS ONS。需要当前注册的是HPLMN网络,
a.       如果SIM中的CPHS ONS的长格式文件(fid:6F14, long name)读取成功,用此当作网络名称。
b.       如果SIM中的CPHS ONS的短格式文件(fid:6F18, short name)读取成功,用此当作网络名称。
这个分的代码可以参考SIMRecords.java中的读取CPHSOns文件的部分
 
 
3.       NITZ Operator Name
此名称是由所注册的网络下发给手机的,参考TS22.042。如果网络有下发这个数据给手机,modem会通过”+CIEV: 10”把数据传给AP端,AP端会用这个数据来当成网络名称,另外AP端还会把这个数据和对应的网络PLMN一同记下来,当之后注册上的网络仍是这个PLMN,这显示的网络名称还会是这个网络名称。
这部分的代码可以参考ril_nw.c中的onNitzOperNameReceived()
 
4.       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类

二 接下来看另一个重要的名称,Service Provider Name,也就是SPN。SPN是卡中的一个文件,fid是6F46。读取SPN首先要看看SST中是否有这个栏位,并且这个栏位是否是activity的。
经常遇到有时候在keyguard上显示的名称和状态栏上的不一样,或者明明是这个运营商的却显示另外一个运营商的名称等等奇怪的现象,这些现象有些是和SPN是有关系的。所以我们需要了解一下SPN的显示规则。SPN有一个字节来规定其显示规则(参考Spec TS 31.102)
这一个字节仅用到第一和第二位,
(1)当注册到网络是HPLMN或者是在plmn属于EF_SPDI中的网络时(默认显示SPN),该字节的第一位的取值意义:
1:需要显示PLMN
0:不需要显示PLMN
(2)当注册到网络不是HPLMN也不在EF_SPDI中的网络时(默认显示PLMN),该字节的第二位取值意义:
1:不需要显示SPN
0:要显示SPN

这两个bit组成的值叫做display condition。这里的plmn指的是网络名称哦,不是指plmn号。所以会有遇到只显示spn而不显示网络名称的情况,并且spn的名称是sim文件中读出来的,其内容不确定的。
 
三 SIM的名称
 
很多人对这个SIM的名称和网络名称有困扰。其实这是两个不同的东西,SIM的名称相对于网络名称简单得多。SIM 名称是SIM info中的一个栏位,sim info是Telephony.db中的一个table。当在SIM Framework初始化时候会下如一个默认的字串当作sim名称,这个字串的内容就是com.mediatek.internal.R.string.new_sim。在SIM ready时会去读取SIM的各种record,在record读取完成之后才根据mcc/mnc到xml去那对应的名称,然后设定到数据库当中,这个就是sim的默认名称了。如果开机之后是打开飞行模式的,那么因为不会去读取sim record,所以sim的默认名称会一直都是com.mediatek.internal.R.string.new_sim。
 
读取record设定sim的默认名称的代码是在SIMRecords.java中的onAllRecordedsLoaded()方法,通过mcc/mnc到lookupOperatorName中读取xml(注意,有些特殊的mcc/mnc是直接读R.string中的数据),然后通过setDefaultNameForNewSIM设定进去。

网络运营商名称显示SIM名称显示相关推荐

  1. 网络运营商名称显示amp;SIM名称显示

    一 网络名称显示这部分比較复杂.Spec对这也有明白的规定,依据其优先级由高往低介绍(其优先级參考TS 22.101), 1.       Enhanced Operator Name String. ...

  2. android 网络运营商名称显示规则(锁屏界面,下拉列表)

    一:Background & 相关flow MTK Operator name display在手机中分成两种类型: 1. Sim卡名称: 根据开机从SIM卡中读取的IMSI去到Spn-con ...

  3. [Swift]获取手机SIM卡网络运营商名称

    导入框架 import CoreTelephony 获取当前运营商名称 /// 获取手机SIM卡网络运营商名称 func currentCarrierName() -> String? {var ...

  4. Android运营商名称的获取及显示过程

    常用的获取方式 手机上运营商名称的显示,通常包括状态栏显示,锁屏界面显示以及设置下面部分菜单的显示,最常用的获取方式如下: Sting operatorName = mSubscriptionInfo ...

  5. modelsim显示状态机名称的方法

    modelsim显示状态机名称的方法 2015-09-08 15:35 1414人阅读 评论(0) 收藏 举报  分类: FPGA基础知识(40)  版权声明:转载请注明出处:http://blog. ...

  6. allgro显示网络名称_起名||网络公司名字推荐

    21世纪是经济和技术快速发展的时代,许多网络公司和企业正在不断涌入.对于新成立的公司,一个好的名字可以给企业带来无法估量的经济利益.那么,网络技术公司该如何起名呢? 一.网络技术公司的命名技巧: 1. ...

  7. android 网络运营商的名字显示规则(锁定屏幕,下拉列表)

    一:Background & 有关flow MTK Operator name display分为两种类型的手机: 1. Sim卡名称: 从基于引导SIM卡读取IMSI到Spn-conf.xm ...

  8. Android之获取移动网络运营商名称

    原来的获取方法不好用了,适配安卓10.0设备,最新获取移动网络运营商名称方法. 获取权限: android.permission.READ_PHONE_STATE 工具类代码: /*** Create ...

  9. 帖子删除显示帖子名称?

    现在我们删除帖子,都只显示ID,不表义,建议删除.确认.结果都显示帖子名称,不仅仅是ID. 转载于:https://www.cnblogs.com/unruledboy/archive/2004/09 ...

最新文章

  1. 基于Hash的消息认证码HMAC简介及在OpenSSL中使用举例
  2. python数据结构与算法(13)
  3. springboot使用Map接收请求参数
  4. javascript通用验证
  5. 常言道:“人在做,天在看。”,你是怎样理解这句话的?
  6. 关于 Linux 的配置文件 /etc/profile 路径出错后相关的命令失效解决方式(如:ls,vi不能用)...
  7. hdu 3930 Broot 二次剩余
  8. cocosBuilder使用总结
  9. Dubbo源码解析-Dubbo协议解析
  10. 【新手教程】51Sim-One Cloud 2.0如何接入被测算法
  11. ActiveMQ学习笔记(4)----JMS的API结构和开发步骤
  12. 1. 物理内存初始化-linux4.0
  13. jQuery easyUI pannel 用法记录
  14. WPF textbox禁用输入法
  15. android 复制u盘文件到手机本地_如何将手机里的文件 、照片传到手机U盘里去?...
  16. 内存和CPU占用率过高,该怎么办?
  17. 网络安全ai能力建设_人工智能对网络安全的影响
  18. [kpw] Kindle Paperwhite 升级到 5.6.5 后,kterm无法启动
  19. 一个用户下多个表空间
  20. 汇编 movs stos rep df 等指令的作用

热门文章

  1. 手机微信页面横屏展示,可切换竖屏
  2. 2011年2月15日到福州
  3. SQL优化篇:如何成为一位写优质SQL语句的绝顶高手
  4. 编译android源码m、mm、mmm命令的使用
  5. [UE4]epic/UE4关于win7报错缺失api-ms-win-downlevel-kernel32-l2-1-0
  6. ECU 自动化生产测试系统
  7. RabbitTemplate
  8. 次时代科幻房间场景作品
  9. 文件上传、文件包含和目路遍历杂谈
  10. 软件测试岗位常见的面试题有哪些?我来告诉你