一 网络名称显示这部分比較复杂。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设定进去。

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

  1. 网络运营商名称显示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 网络运营商的名字显示规则(锁定屏幕,下拉列表)

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

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

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

  6. Ubuntu14.04 64位上配置终端显示git分支名称

    之前在Ubuntu14.04上在终端上显示git分支名称基本上都使用oh-my-zsh,可以参考 https://blog.csdn.net/fengbingchun/article/details/ ...

  7. java百度地图地名定位地址_百度地图定位显示省市区街道名称,非常实用

    [实例简介] 百度地图定位显示省市区街道名称,非常实用 [实例截图] [核心代码] locSDK_3.1_Demo └── locSDK_3.1_Demo ├── AndroidManifest.xm ...

  8. 终端中显示git分支名称的方法

    终端中显示git分支名称的方法   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博客地址为:亓官劼的博客,B站昵称为:亓官劼,地址为亓官劼 ...

  9. Flutter iOS问题记录 - Fastlane打包的ipa包上传fir后不显示应用版本名称

    文章目录 前言 开发环境 问题描述 问题分析 解决方案 总结 最后 前言 看到又是应用版本名称的问题,我心里已经大概知道是什么原因了. 开发环境 Flutter: 3.3.5 Dart: 2.18.2 ...

最新文章

  1. 根据listObject中的某个字段排序
  2. Visual Studio附加到进程调试
  3. vs实现python c扩展模块
  4. 理解T-SQL:高级查询
  5. 4种实例 advice aop_Java动态代理在Spring的应用:AOP编程与动态代理知识
  6. Html基础Part1:Htmla标签的几种跳转姿势
  7. java 统计文本行数_统计文本文件的行数,单词书,字节数
  8. 多线程学习(三)----死锁问题
  9. 读锁调度导致高延迟的 case 一例
  10. notepad++每行首尾添加内容
  11. 集合、深浅拷贝、文件操作(读、写、追加)函数初识(参数)
  12. 采用合适的网站优化技术
  13. 从C源代码到可执行文件的四个过程:预处理、编译、汇编、链接
  14. golang 一段代码不甚明白
  15. java和c++的区别大吗_莫桑钻和钻石外观区别大吗 莫桑钻和真的钻石有什么区别...
  16. C++包含头文件时尖括号和双引号区别
  17. js window.open 参数设置
  18. linux下好用的超级终端,【整理】Windows下超级终端的最佳替代品,免费的串口终端工具Putty...
  19. UML---构件图和部署图
  20. 计算机编程算法和数学有什么关系?

热门文章

  1. 现代数据库及大数据管理—常见问题与技术归纳
  2. 解决Windows XP 系统下,用户登录一直循环提示激活
  3. stratch pragramming
  4. php判断显示器横屏还是竖屏,判断横屏竖屏(三种)
  5. 视频监控ai分析系统 yolo
  6. adb为Android的root方法,Android 实现永久性开启adb 的root权限
  7. 【LeetCode-SQL】196. 删除重复的电子邮箱
  8. python opencv图像二值化函数_python opencv 二值化 计算白色像素点的实例
  9. 【CISSP备考笔记】第2章:资产安全
  10. anaconda图形界面打开方式