本文主要是介绍运营商名称 是如何显示到 手机通知栏上的?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在我们日常使用手机的过程中,经常会在通知栏或设置菜单中看到特定的运营商名称,例如"中国移动"、"中国联通"或"中国电信"等。
那么,这些运营商的名称是如何出现在我们手机上的呢?手机又是如何区分不同运营商的网络呢?当我们漫游到海外时,手机显示的是国外还是国内的运营商名称呢?
其实,这一切都与PLMN(Public Land Mobile Network,公共陆地移动网络)
与SPN(Service Provider Name,服务提供商名称)
有关。
今天,我们就来揭秘手机运营商名称的显示规则。
- PLMN编码 与 SPN服务提供商名称
- PLMN编码 与 PLMN Name的数据来源
- SPN 服务提供商的显示规则
- NITZ协议结构(附录)
- 手机通知栏 运营商名称 显示规则总结
一、PLMN与SPN
首先,让我们来了解一下PLMN和SPN的概念。
- PLMN
- SPN
1.1 PLMN
PLMN(Public Land Mobile Network)
是一段数字编码,用于识别全球所有移动蜂窝网络
,它由MCC(Mobile Country Code,移动国家代码)
和MNC(Mobile Network Code,移动网络代码)
两部分组成。
MCC 和 MNC:
MCC
提供了国家/地区级别的标识
,而MNC
则提供了特定运营商或网络的标识
。这种组合的唯一性使得每个运营商的网络都可以被准确地识别和区分。
- PLMN(Public Land Mobile Network,公共陆地移动网络编码)
- MCC(Mobile Country Code,移动国家代码)
- MNC(Mobile Network Code,移动网络代码)
PLMN 编码举例:
国内三大运营商PLMN编码举例
如下:
PLMN | 运营商 |
---|---|
46000 | 中国移动 |
46001 | 中国联通 |
46002 | 中国移动 |
46003 | 中国电信 |
46005 | 中国电信 |
46006 | 中国联通 |
46007 | 中国移动 |
通过解析PLMN中的MCC和MNC,我们可以确定一个移动网络的所属国家/地区和特定运营商。
HPLMN与VPLMN:
根据手机接入网络情况,可以把PLMN分为HPLMN(Home PLMN,归属PLMN)
和VPLMN(Visited PLMN,访问PLMN)
的概念。
-
HPLMN(Home PLMN,归属PLMN)
是指移动通信用户所属的本地公用陆地移动网络,是“归属”网络的概念。
比如在中国移动营业厅办理了一张移动手机卡
,该卡与中国移动网络
建立了归属关系,这个网络就是用户的HPLMN。 -
VPLMN (Visited PLMN,访问PLMN)
是指用户在漫游状态下访问的非归属网络,即“拜访”网络。
比如,用户漫游到了其他国家,手机接入了国外的运营商,这个运营商网络的PLMN与手机中SIM卡中IMSI中包含的PLMN不一致,此时这个网络就被称为VPLMN。
1.2 SPN
SPN(Service Provider Name,服务提供商名称)
是一段中文或英文字符,例如"中国移动"或"CMCC"。
SPN指的是服务提供商名称,在手机或移动设备的用户界面中,即显示在信号栏、设置菜单或其他位置上的移动网络运营商的标识。
SPN的显示规则与当前注册网络的归属状态有关,根据3GPP TS22.101规范:
- 如果当前注册网络为HPLMN(本网注册),则显示
SIM卡中配置的SPN
或HPLMN对应的PLMN Name
。 - 如果当前注册网络为VPLMN(异网漫游),则显示
Roaming PLMN编码对应的PLMN Name
(漫游网络名称)。 - 此外,根据SPN的配置和显示规则,手机漫游时:可能
只显示Roaming PLMN Name
,也可能Roaming PLMN Name和SPN同时显示
。
以上提到的三种情况,后续会进行详细说明,这里仅给出大概的显示规则。
二、PLMN编码与PLMN Name的数据来源
上文提到了PLMN编码
和 PLMN Name
,这里我们介绍一下其数据来源
以及映射关系
。
- PLMN 编码的数据来源
- PLMN Name 的数据来源
- PLMN与PLMN Name映射关系配置表
2.1 PLMN的数据来源
PLMN编码有两个来源,分别为运营商基站广播的PLMN编码
和SIM卡中存储的PLMN编码
:
- 运营商基站的广播信号,会广播当前网络运营商的PLMN编码。
- 手机SIM卡中
IMSI
中会包含该SIM卡的运营商的PLMN编码。
2.2 PLMN Name的数据来源
依据3GPP TS22.101 A.3Country/PLMN indication规范,PLMN Name有三个来源
:
- 来源自用户
移动设备中存储的PLMN Name
(这个存储的PLMN来源自上次连接运营商基站时,基站广播的信息); - 运营商
基站 NITZ 协议广播
的PLMN Name(可选基站广播
); - 存储在用户的
USIM卡中的SPN
;
并且三种数据的优先级
如下:
USIM卡SPN
> 基站广播NITZ
> 移动手机存储的PLMN Name
2.3 PLMN与SPN映射关系表
前文提到过,基站 NITZ 协议广播是一个可选广播(因此NITZ广播可能并不存在
)。
若运营商基站未实现NITZ协议,该情况下手机终端只能获取到基站广播的PLMN编码
和SIM卡存储的SPN
。
基站广播的PLMN编码
;SIM
卡中存储的PLMN编码
与对应的SPN
;
那么这里就有一个问题:若当前手为漫游Roaming网络,该如何获取PLMN编码对应的PLMN Name ?
这里就涉及到了一个由由ITU维护的PLMN与SPN映射关系表
:
在Android手机商,手机Rom厂商
则在Android手机system/etc/
路径下,存放着一个spn-conf.xml
配置列表。由Google和各手机产商进行修改和维护
。
在实际的Android手机Framework研发过程中,研发人员根据当前网络的PLMN编码
从spn-conf.xml
中查询对应的SPN
。
三、SPN显示规则
前文提到过,显示在用户手机通知栏
的运营商名称,可以是SPN
、也可以是PLMN Name
、甚至可以是PLMN Name-SPN
:
- SPN与PLMN Name显示哪一个
- SPN与PLMN Name同时显示的规则
3.1 SPN与PLMN Name显示哪一个
根据规范3GPP TS22.101 A.4Service Provider Name indication:
- 若当前注册网络为
归属PLMN
则展示SIM卡中配置的SPN(Service Provider Name,服务提供商名称)
; - 若当前注册网络
非归属PLMN
(Roaming PLMN),则显示Registered PLMN
的PLMN Name
;
3.2 SPN与PLMN同时显示
根据 3GPP TS31.102 4.2.12EFSPN (Service Provider Name):
若当前注册网络为归属PLMN
,有SPN就要显示SPN
:
- 如果SPN的
B1=1
,则需要同时显示Registered PLMN
; - 如果SPN的
B1=0
,则不需要同时显示Registered PLMN
;
若当前注册网络非归属PLMN
(Roaming PLMN),则显示Registered PLMN
的PLMN Name
;
- 如果SPN的
B2=0
,则需要同时显示SPN
; - 如果SPN的
B2=1
,则不需要同时显示SPN
;
四、NITZ协议
这一节是对NITZ协议结构
的补充,对于非专业人员是没有必要详细了解的。
承载NITZ
信息的GMM Information Message
在运营商网络的部署是可选的
,并不是每家运营商基站都有部署。
其对应的消息格式可根据3GPP TS24.008 9.4.19GMM Information:规范进行查看:
3GPP TS24.008 10.5.3.5a Network Name:
五、手机运营商名称显示规则总结
当手机连接到某家运营商网络时,用户会 从SIM卡 和 从基站 来获取 PLMN编码 和 PLMN Name:
SIM卡
中存储了用户PLMN(Public Land Mobile Network)
和SPN(Service Provider Name 服务提供商名称)
;运营商基站
广播了自身网络的PLMN编码
和PLMN Name信息
(通过NITX协议):
手机接入HPLMN时,显示SIM卡中存储的SPN(Service Provider Name)。手机接入VPLMN时,显示基站广播 PLMN编码 对应的PLMN Name:
若当前注册网络为归属PLMN
,SIM卡中有SPN就显示SPN
:
- 如果SPN的
B1=1
,则需要同时显示Registered PLMN Name
; - 如果SPN的
B1=0
,则不需要同时显示Registered PLMN Name
;
若当前注册网络非归属PLMN
(Roaming PLMN),则显示Roaming PLMN编码
对应的PLMN Name
;
- 如果SPN的
B2=0
,则需要同时显示SPN
; - 如果SPN的
B2=1
,则不需要同时显示SPN
;
六、参考
3GPP TS22.101 A.3Country/PLMN indication:
https://www.3gpp.org/ftp/specs/archive/22_series/22.101
3GPP TS22.101 A.4Service Provider Name indication:
https://www.3gpp.org/ftp/specs/archive/22_series/22.101
3GPP TS31.102 4.2.12EFSPN (Service Provider Name):
https://www.3gpp.org/ftp/specs/archive/31_series/31.102
3GPP TS24.008 9.4.19GMM Information:
https://www.3gpp.org/ftp/specs/archive/24_series/24.008
ITU Mobile Network Codes 2023:
https://www.itu.int/dms_pub/itu-t/opb/sp/T-SP-E.212B-2023-PDF-E.pdf
运营商名字是如何获取的?
https://www.e-learn.cn/topic/3031894
Android运营商名称显示之PLMN与SPN显示规则:
https://blog.csdn.net/u010961631/article/details/50682406
spn-conf.xml 运营商名字显示:
https://blog.csdn.net/sjz4860402/article/details/79835663
这篇关于运营商名称 是如何显示到 手机通知栏上的?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!