网络运营商名称显示 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设定进去。

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

原文地址:https://www.cnblogs.com/kwincaq/p/10430094.html

时间: 2024-08-11 06:03:32

网络运营商名称显示 SIM名称显示的相关文章

网络运营商名称显示&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中存放的是N

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

一:Background & 相关flow MTK Operator name display在手机中分成两种类型: 1. Sim卡名称: 根据开机从SIM卡中读取的IMSI去到Spn-conf.xml中(如果是MVNO的卡则是Virtual-spn-conf-by-***.xml中)匹配得到的name,会保存在SIMInfo这个database中,后续sim卡的名称就从此database中取得 关于MVNO可以参考如下FAQ: ID: FAQ09811 [NW]如何区分MNO和MVNO 使用场

sharepoint 部分site下的库不能显示正常名称,显示为“error”

错误现象: 部分site下的库不能显示正常名称,显示为"error",Navigation的部分也會顯示Feature '525dc00c-0745-47c0-8073-221c2ec22f0f' for list template '101' is not installed in this farm.  The operation could not be completed. 从故障现象分析,是缺少某个模板功能导致的,根据错误提示发现,所有错误site提示错误的GUID和对应的L

同时调用多个栏目的文章,文章前显示栏目名称

{pc:get sql="SELECT * FROM v9_news WHERE catid IN (61,62,63,64,65) order by id DESC" num="10"  return="data" }{loop $data $n $r} <LI><SPAN><a href="{$CATEGORYS[$r[catid]][url]}">[{$CATEGORYS[$r['ca

【Unity3D自学记录】Unity3D显示NPC名称

using UnityEngine; using System.Collections; public class NPCName : MonoBehaviour { //主角对象 private GameObject player; //主摄像机对象 private Camera camera; //NPC名称 private string name = "我是NPC"; void Start() { //根据Tag得到主角对象 player = GameObject.FindGam

asp.net 文件下载显示中文名称

protected void Page_Load(object sender, EventArgs e)    {        string guid = Request.QueryString["GUID"];        string sql = "select XSMC,FJMC,LJ from T_AQGL_FJ where GUID='" + guid + "'";        CX.DBGetResult dbgr = new

Java邮件开发(三):解决附件名为乱码及显示友好名称

1.附件的名称只能为英文,中文乱码 2.友好名称的显示. 我们使用163等邮箱发送邮件时,我们经常可以看到收件人一栏中会是:张益达 <[email protected]>这种方式.在上一版本的代码中并没有使用这样的方式. 下面解决这两个问题 1. 对于中文乱码,是因为邮件要求所有的字符必须是ascII字符,中文字符当然不可以.因此我们只需要把我们的中文全部转码就可以了. 而JavaMail提供了这样一个类:MimeUtility.使用这个类的encodeText方法就可以对中文进行编码. 2.

viewer.js 显示图片名称和照片属性

显示效果: 中间显示照片名称,右侧显示照片属性. 图片名称是保存与数据库里的,照片属性是相机或手机拍照时就存储于照片格式中的. 手机照片甚至保存了经纬度等详细信息(这也是QQ能实现旅游相册的原因). ADO.net MVC   部分视图 ViewPhotoWithAttr,也就是功能模块化. <link href="~/Scripts/viewer/viewer.min.css?v=20190612" rel="stylesheet" /> <sc

asp 之 让实体中字段类型为DateTime的字段只显示日期不显示时间

       在我们平时的工作开发中,我们通常会遇到这样的一个问题:某个实体的某个字段是DateTime类型的,可是我们在界面上只想让它显示日期不显示时间! 一个订单实体: //订单类 public class order { //订单ID public int id{get;set;} //物品ID public int resId{get;set;} //物品名称 public string resName { get; set; } //物品价格 public decimal price