网络运营商名称显示&SIM名称显示
一 网络名称显示这部分比較复杂。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名称显示的更多相关文章
- android 网络运营商的名字显示规则(锁定屏幕,下拉列表)
一:Background & 有关flow MTK Operator name display分为两种类型的手机: 1. Sim卡名称: 从基于引导SIM卡读取IMSI到Spn-conf.xm ...
- 小米手机Toast显示带应用名称问题解决方法
近期为了适配刘海屏,向公司申购了一步小米8的手机,然后测试人员那边测出来一堆适配的问题,其中有一个每一个Toast会显示app的名称+显示的内容,然后网上查找了一下解决方法记录一下,顺便封装了Toas ...
- 转:zTree树控件key配置之title:zTree树节点名称过长如何省略显示且鼠标移入节点上能够显示全称
当树节点的名称有些很长时,全部显示出来显得很拥挤的情况下,我们会想到用省略节点名称来代替,当鼠标移入节点时能够显示该节点的全称.这样我们应该如何做呢? 首先,我们要在树的节点内多增加一个属性用于设置该 ...
- hbuilder在android手机里用chrome调试,只显示了设备名称,却没有inspect按钮
stark 通过“菜单”->“工具”->“检查设备”打开设备检查页面,只显示了设备名称,却没有inspect按钮,要怎么办 1 赞2014-10-09 22:00 ============ ...
- ASPxComboBox默认情况下不显示代码和名称,特别头疼,直到发现了关键
1.ASPxComboBox 默认不开启 AutoPostBack: 既是开启,总显示第一行(好像是个bug) 2.只好ajax,但是默认情况下不显示代码和名称,特别头疼,直到发现了关键 <dx ...
- php 根据ip获取城市以及网络运营商名称(利用qqwry.dat)
根据用户IP地址判定出所在城市以及网络运营商 qqwry.dat下载地址:http://files.cnblogs.com/guangxiaoluo/qqwry.rar 解压出来即可 //获取用户真 ...
- iPhone使用CoreTelephony获得SIM卡网络运营商资讯和通话资料
注意要加头文件目录 /System/Library/Frameworks/CoreTelephony.framework/Headers 到 build 设置 Header Search Paths, ...
- Xcode模拟器不显示SDK版本,反而显示设备ID的解决办法
今天在应用程序中修改了Xcode app 的名称,结果导致Xcode模拟器不显示SDK版本,反而显示设备ID了,感觉特别的忧伤......如图: 进到Xcode->window->Devi ...
- CRM导入组织报实例名称必须与计算机名称相同的问题
今天采用P2V拷贝了一台CRM数据库到虚机上,因为要加域必须得把计算机名改了,然后再重新导入组织的时候报错了:"实例名称必须与计算机名称相同",google了下没有匹配的问题答案, ...
随机推荐
- element-ui Tag、Dialog组件源码分析整理笔记(五)
Tag 标签组件 <script> export default { name: 'ElTag', props: { text: String, closable: Boolean, // ...
- element-ui Steps步骤条组件源码分析整理笔记(九)
Steps步骤条组件源码: steps.vue <template> <!--设置 simple 可应用简洁风格,该条件下 align-center / description / ...
- jsp登录显示
1.登录成功设置session request.getSession().setAttribute("user", user); 2.前台test <div class=&q ...
- [性能调优]如何通过读PeopleSoft Trace文件来调优
理解PeopleSoft Trace文件对于解决性能问题是绝对有必要的.你可能面临一个问题,用户抱怨性能较慢,而OEM并没有补货SQL,你有2种方法选择:使用PeopleSoft trace检查或启用 ...
- Ubuntu16.10上安装NodeJS6.9.2
1.下载 https://nodejs.org/en/download/ 2.解压 tar -xJf node-v6.9.2-linux-x64.tar.xz 3. 移到通用的软件安装目录 /opt/ ...
- VBoxManage翕令
VBoxManage list vms VBoxManage startvm dcsvr08 -type vrdp VBoxHeadless -startvm "dcsvr08" ...
- 学习MVC之租房网站(一)-项目概况
这儿的MVC是ASP.NET MVC,只用过C#一种语言,后面就直接称呼为MVC了. 一年多没接触MVC后,现在想用MVC做个网站,觉得特别吃力,以前学的仅仅是皮毛,所以闲置了一年后,MVC知识就重新 ...
- Android Monkey的使用
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/71750907 本文出自[赵彦军的博客] 什么是 Monkey Monkey 是一个 ...
- 使用angular-cli脚手架快速搭建项目
第一步 安装全局的angular-cli, npm install -g @angular/cli 或者 cnpm install -g @angular/cli@v1.0.0-rc.2 – 国内淘宝 ...
- PHP多进程编之pcntl_fork
其实PHP是支持并发的,只是平时很少使用而已.平时使用最多的应该是使用PHP-FMP调度php进程了吧. 但是,PHP的使用并不局限于做Web,我们完全也可以使用PHP来进行系统工具类的编程,做监控或 ...