HarmonyOS鸿蒙Next中如何解决无法准确获取手机卡运营商信息的问题
HarmonyOS鸿蒙Next中如何解决无法准确获取手机卡运营商信息的问题
【问题现象】
sim.getSimSpn接口和radio.getPrimarySlotId接口在某些SIM卡上无效或返回结果呈现方式不一致,具体表现如下:
- 插入联通卡时,radio.getPrimarySlotId返回空;插入电信卡时,能够正常返回卡槽ID(1或2)。
- 电信卡插入SIM1卡槽时,sim.getSimSpn无法获取运营商类型;插入NM卡槽时,可以获得结果。
- 移动卡通过sim.getSimSpn获得的运营商名称为“CMCC”,而电信卡返回“中国电信”,格式不一致。
【背景知识】
-
@ohos.telephony.sim.getSimSpn:获取指定卡槽SIM卡的服务提供商名称(Service Provider Name,SPN)。
参考链接:SIM卡管理|sim.getSimSpn
-
@ohos.telephony.sim.getSimOperatorNumeric:获取指定卡槽SIM卡的归属PLMN(Public Land Mobile Network)号。
-
@ohos.telephony.radio.getPrimarySlotId:获取主卡所在卡槽的索引号。
-
公共陆基移动网(PLMN):公共陆基移动网(Public land mobile network,或简称“PLMN”),是一电子通讯术语,为基于陆地、必须装备无线电发射台(发射塔)与基地台的移动电话设施的总称,与其他公共陆基移动网络、提供电话通讯的交换网、传送数据和提供因特网服务的服务商实现互联。 PLMN由移动设备国家代码(MCC)和移动设备网络代码(MNC)标识。每个运营商都有其自己的PLMN。
参考链接:公共陆基移动网 - 维基百科
-
移动设备网络代码(MNC)和 移动设备国家代码(MCC):移动设备网络代码(Mobile Network Code,MNC)是与移动设备国家代码(Mobile Country Code,MCC)(也称为“MCC / MNC”)相结合,以用来表示唯一一个的移动设备的网络运营商。这些运营商可以是使用的GSM/LTE、CDMA、iDEN、TETRA和通用移动通讯系统的公共陆基移动网亦或是卫星网络。ITU-T协议E.212中定义移动设备国家代码。
参考链接:移动设备网络代码 - 维基百科
【问题分析】
- 通过sim.getSimSpn接口获取运营商类型依赖于SIM卡内的固有信息和运营商网络的注册信息。由于存储方式和运营商的不同,这些信息会有所差异。如果运营商信息未写入SIM卡,则可能无法读取。
- 通过sim.getSimOperatorNumeric接口可以获取手机SIM卡的PLMN信息(MCC+MNC)。该信息在SIM卡成功注册到网络后保存在卡中,且PLMN列表在几年到数十年间通常不会变化,可以保证返回结果的稳定性和准确性。开发者在获取到PLMN信息后,只需查表即可确认SIM卡的运营商。
【解决方案】
通过sim.getSimOperatorNumeric接口获取PLMN(MCC+MNC)后,可以查表确认SIM卡所属运营商。
截至目前,国内已分配的MCC和MNC如下图所示(参考链接:移动设备网络代码 - 中华人民共和国 - 维基百科):
PLMN(MCC/MNC)最新数据可以查看此网站,该网站支持导出数据:MCC-MNC.net。
【总结】
由于SIM卡封装方式的影响,通过sim.getSimSpn接口获取的运营商信息不可靠。而通过sim.getSimOperatorNumeric接口获取的PLMN信息通常是可靠的,开发者可以通过查表获取准确的运营商名称。
更多关于HarmonyOS鸿蒙Next中如何解决无法准确获取手机卡运营商信息的问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于HarmonyOS鸿蒙Next中如何解决无法准确获取手机卡运营商信息的问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,若无法准确获取手机卡运营商信息,可尝试以下方法:
- 确保设备已插入有效SIM卡,并检查网络连接是否正常。
- 在设置中查看“移动网络”选项,确认运营商信息是否显示正确。
- 若问题依旧,可尝试重启设备或重新插入SIM卡。
- 此外,确保系统已更新至最新版本,以修复可能存在的系统问题。