当前位置: 首页 > news >正文

鸿蒙新特性:@ohos.telephony.radio/sim 蜂窝网络实验室实战 —— 无线技术、信号强度与 SIM 卡

引言

移动应用的核心能力依赖网络通信,而蜂窝网络是移动设备最基础的联网方式。无论是即时通讯、视频播放还是在线支付,开发者都需要了解当前设备的无线接入技术(2G/3G/4G/5G)、信号强度等级、网络注册状态以及 SIM 卡状态。HarmonyOS NEXT 通过@ohos.telephony.radio@ohos.telephony.sim两个模块将这些蜂窝网络信息统一暴露。

@ohos.telephony.radio@ohos.telephony.sim同属@kit.TelephonyKit,分别负责无线接入技术和 SIM 卡管理。与 Android 的TelephonyManager(单一大类包含所有电话功能)和 iOS 的CTTelephonyNetworkInfo(仅限蜂窝网络信息)相比,鸿蒙将无线和 SIM 拆分为两个职责清晰的子模块——radio 专注无线技术栈(制式/信号/注册),sim 专注 SIM 卡状态。

本文将深入讲解@ohos.telephony.radio的无线技术查询、信号信息获取、网络状态监测和@ohos.telephony.sim的 SIM 卡状态读取四大核心能力,并构建一个"蜂窝网络实验室"Demo,在一个页面中完整展示蜂窝网络的全部诊断信息。

一、API 架构:radio 与 sim 的双模块设计

1.1 核心设计理念

@kit.TelephonyKit将蜂窝网络能力拆分为四个子模块:radio(无线接入)、sim(SIM 卡)、data(数据连接)、observer(状态观察)。本文聚焦最常用的radiosim两个子模块。

importradiofrom'@ohos.telephony.radio';importsimfrom'@ohos.telephony.sim';// radio:同步获取无线接入技术constrt=radio.getRadioTechSync(0);// slotId = 0(SIM 卡槽1)// rt.psRadioTech — 分组交换域(数据)的无线技术// rt.csRadioTech — 电路交换域(语音)的无线技术// radio:同步获取信号信息constsignals=radio.getSignalInformationSync(0);// signals[0].signalLevel — 信号强度等级(0-5)// radio:异步获取网络注册状态radio.getNetworkState(0).then((ns)=>{// ns.regState — 注册状态// ns.cfgTech — 当前无线技术// ns.nsaState — 5G NSA 状态});// sim:同步获取 SIM 卡状态conststate=sim.getSimStateSync(0);// SimState.SIM_STATE_READY / NOT_PRESENT / LOCKED / etc.

这种双模块设计带来三个好处:

  • 职责单一:radio 只管无线信号和技术,sim 只管 SIM 卡,不会出现一个模块几十个方法的混乱情况
  • 同步优先:所有即时可获取的信息(无线技术、信号等级、SIM 状态)都提供 Sync 同步方法,零延迟
  • 异步补充:网络状态查询(需要与基带通信)使用 Promise 异步模式

1.2 getRadioTechSync —— 无线接入技术

getRadioTechSync(slotId: number)同步返回NetworkRadioTech对象,包含两个字段:

字段说明典型值
psRadioTech分组交换域(PS)的无线接入技术LTE (4G)、NR (5G)
csRadioTech电路交换域(CS)的无线接入技术WCDMA (3G)、LTE (VoLTE)

PS 域(Packet Switched)承载数据业务——上网、视频、消息等。CS 域(Circuit Switched)承载语音通话。在 4G 时代,VoLTE(Voice over LTE)将语音也搬到了 PS 域;在 5G 时代,VoNR(Voice over NR)进一步演进。通过psRadioTechcsRadioTech可以精确判断当前设备的数据和语音承载方式。

RadioTechnology枚举是蜂窝网络技术的完整谱系:

枚举值说明代际
RADIO_TECHNOLOGY_GSMGSM2G
RADIO_TECHNOLOGY_1XRTTCDMA 1xRTT2G
RADIO_TECHNOLOGY_WCDMAWCDMA3G
RADIO_TECHNOLOGY_HSPAHSPA3G
RADIO_TECHNOLOGY_HSPAPHSPA+3.5G
RADIO_TECHNOLOGY_TD_SCDMATD-SCDMA3G
RADIO_TECHNOLOGY_LTELTE4G
RADIO_TECHNOLOGY_LTE_CALTE-A(载波聚合)4G+
RADIO_TECHNOLOGY_NRNew Radio5G
privatetechLabel(tech:radio.RadioTechnology):string{if(tech===radio.RadioTechnology.RADIO_TECHNOLOGY_GSM)return'GSM (2G)';if(tech===radio.RadioTechnology.RADIO_TECHNOLOGY_LTE)return'LTE (4G)';if(tech===radio.RadioTechnology.RADIO_TECHNOLOGY_LTE_CA)return'LTE-A (4G+)';if(tech===radio.RadioTechnology.RADIO_TECHNOLOGY_NR)return'NR (5G)';if(tech===radio.RadioTechnology.RADIO_TECHNOLOGY_WCDMA)return'WCDMA (3G)';if(tech===radio.RadioTechnology.RADIO_TECHNOLOGY_HSPA)return'HSPA (3G)';if(tech===radio.RadioTechnology.RADIO_TECHNOLOGY_HSPAP)return'HSPA+ (3G)';if(tech===radio.RadioTechnology.RADIO_TECHNOLOGY_TD_SCDMA)return'TD-SCDMA (3G)';if(tech===radio.RadioTechnology.RADIO_TECHNOLOGY_1XRTT)return'1xRTT (2G)';return'其他';}

1.3 getSignalInformationSync —— 信号强度

getSignalInformationSync(slotId)同步返回Array<SignalInformation>数组。每个SignalInformation对象中最重要的字段是signalLevel——信号强度等级,取值范围为 0-5(部分设备可能为 0-4)。数值越大表示信号越好。

constinfos=radio.getSignalInformationSync(0);if(infos.length>0){constlevel=infos[0].signalLevel;// level: 0=无信号, 1-2=较弱, 3=一般, 4=良好, 5=优秀}

信号强度分级策略:

if(level>=5){label='优秀';}elseif(level>=4){label='良好';}elseif(level>=3){label='一般';}elseif(level>=1){label='较弱';}else{label='无信号';}

Demo 中通过可视化信号格直观展示信号强度——5 段竖条,填充颜色根据信号等级自动变化:绿(优秀)、蓝(良好)、黄(一般)、红(较弱)、灰(无信号)。

1.4 getNetworkState —— 网络注册状态

getNetworkState(slotId?)是 radio 模块中唯一的异步 API,返回Promise<NetworkState>NetworkState对象包含多个字段:

字段类型说明
regStateRegState网络注册状态
cfgTechRadioTechnology当前配置的无线技术
nsaStateNsaState5G NSA 组网状态
longOperatorNamestring运营商全称(如 “中国移动”)
shortOperatorNamestring运营商简称(如 “CMCC”)
plmnNumericstringPLMN 数字代码
isRoamingboolean是否漫游
isCaActivebooleanCA 载波聚合是否激活
isEmergencyboolean是否仅限紧急呼叫

RegState 注册状态枚举:

枚举说明
0REG_STATE_NO_SERVICE无服务(信号盲区或飞行模式)
1REG_STATE_IN_SERVICE已注册(正常使用)
2REG_STATE_EMERGENCY_CALL_ONLY仅紧急呼叫(无 SIM 卡或欠费)
3REG_STATE_POWER_OFF无线已关闭(飞行模式)

NsaState 5G NSA 状态枚举:

枚举说明
1NSA_STATE_NOT_SUPPORTLTE 小区不支持 NSA
2NSA_STATE_NO_DETECT支持 NSA 但未检测到 NR 覆盖
3NSA_STATE_CONNECTED_DETECTLTE 连接下检测到 NR 覆盖
4NSA_STATE_IDLE_DETECTLTE 空闲下检测到 NR 覆盖
5NSA_STATE_DUAL_CONNECTEDEN-DC 双连接已激活(真正的 5G)

NSA(Non-Standalone)是 5G 早期部署的主要模式——手机同时连接 4G LTE(锚点)和 5G NR(数据增强)。nsaState的五个状态精确描述了设备从"不支持"到"完全 5G 双连接"的全过程。

二、@ohos.telephony.sim —— SIM 卡管理

2.1 getSimStateSync —— SIM 卡状态

getSimStateSync(slotId)同步返回SimState枚举值,表示 SIM 卡的当前状态:

枚举值说明
SIM_STATE_READYSIM 卡就绪,可以正常使用
SIM_STATE_NOT_PRESENT卡槽为空,未检测到 SIM 卡
SIM_STATE_LOCKEDSIM 卡已锁定(需要 PIN/PUK 解锁)
SIM_STATE_NOT_READYSIM 卡存在但未初始化完成
SIM_STATE_LOADEDSIM 卡数据已加载(联系人等)
constst=sim.getSimStateSync(0);if(st===sim.SimState.SIM_STATE_READY){// SIM 卡正常,可以获取更多信息}elseif(st===sim.SimState.SIM_STATE_NOT_PRESENT){// 设备未插卡}

2.2 getISOCountryCodeForSimSync —— 运营商国家代码

getISOCountryCodeForSimSync(slotId)同步返回 ISO 国家代码字符串(如 “cn”、“us”、“jp”),用于判断 SIM 卡的归属国家。

constcode=sim.getISOCountryCodeForSimSync(0);// 返回 "cn" 表示中国运营商

这个信息在国际化应用(i18n)和合规检查中非常有用——例如根据 SIM 卡国家自动切换默认语言或判断内容分发区域。

三、实战 Demo:蜂窝网络实验室

3.1 页面设计

"蜂窝网络实验室"页面分为六个功能区域:

  1. 信号强度面板:大字显示信号等级标签(优秀/良好/一般/较弱/无信号),颜色随等级自动变化。右侧可视化信号格——5 段竖条从矮到高,填充色与信号等级联动。下方三栏"信号级别"(Lv.0-5)、“网络注册”(已注册/无服务/仅紧急呼叫/无线关闭)和"5G NSA"(不支持/未检测/已检测/双连接)。

  2. 无线接入技术双栏:左侧橙色卡片显示 PS 域(数据)的无线技术(LTE/NR/WCDMA 等),右侧橙色卡片显示 CS 域(语音)的无线技术。下方灰色说明文字解释 PS/CS 域的区别。

  3. SIM 卡与网络三栏:展示 SIM 状态(就绪/无卡/锁定/未就绪)、国家代码(ISO 码)、网络类型(cfgTech 无线技术标签)。

  4. 无线技术代际参考:2G(灰色)、3G(蓝色)、4G(绿色)、5G(橙色)四色卡片展示各代际对应的无线技术名称,帮助开发者快速建立认知映射。

  5. 快捷操作:两个按钮——"刷新全部"重新读取 radio + sim 全部信息,"仅刷新信号"仅重新获取 SignalInformation。

  6. 操作日志:记录每次 API 调用结果,时间戳 + 消息,按类别着色。

3.2 核心实现

数据模型:

@StateslotId:number=0;@StateradioTech:string='--';@StatepsRadioTech:string='--';@StatecsRadioTech:string='--';@StatenetworkType:string='--';@StateregState:string='--';@StatensaState:string='--';@StatesimState:string='--';@StateisoCode:string='--';@StatesignalLevel:string='--';@StatesignalLevelNum:number=0;@Stateloading:boolean=false;

slotId固定为 0(主卡槽),适用于大多数单卡设备。双卡设备需要传入 0 或 1 区分卡槽。

信号格可视化:

privatesignalBarColor(index:number):string{if(index<=this.signalLevelNum){if(this.signalLevelNum>=4)return'#10B981';// 绿色if(this.signalLevelNum>=3)return'#3B82F6';// 蓝色if(this.signalLevelNum>=2)return'#F59E0B';// 黄色return'#EF4444';// 红色}return'#E2E8F0';// 未激活段:灰色}

5 段竖条高度从 12px 递增到 36px,通过signalBarColor(index)控制每一段的填充颜色。信号等级为 5 时全部 5 段亮绿色,等级为 0 时全部灰色。

状态枚举标签转换:

privatesimLabel(state:sim.SimState):string{if(state===sim.SimState.SIM_STATE_READY)return'SIM 就绪';if(state===sim.SimState.SIM_STATE_NOT_PRESENT)return'无 SIM 卡';if(state===sim.SimState.SIM_STATE_LOCKED)return'SIM 已锁定';if(state===sim.SimState.SIM_STATE_NOT_READY)return'SIM 未就绪';if(state===sim.SimState.SIM_STATE_LOADED)return'SIM 已加载';return'未知';}privateregLabel(rs:radio.RegState):string{if(rs===radio.RegState.REG_STATE_NO_SERVICE)return'无服务';if(rs===radio.RegState.REG_STATE_IN_SERVICE)return'已注册';if(rs===radio.RegState.REG_STATE_EMERGENCY_CALL_ONLY)return'仅紧急呼叫';if(rs===radio.RegState.REG_STATE_POWER_OFF)return'无线关闭';return'未知';}

3.3 交互方式

Demo 提供两个核心交互点:

  1. 刷新全部:一口气执行refreshRadio()refreshSim()refreshSignal()refreshNetworkType()四个方法,更新页面上所有蜂窝网络信息。loading状态在刷新期间禁用按钮防止重复点击。

  2. 仅刷新信号:只重新调用getSignalInformationSync()更新信号强度和信号格可视化。信号强度是唯一频繁变化的指标(移动中、进出电梯时会波动),独立刷新按钮允许用户单独追踪信号变化。

  3. 自动刷新:页面进入(aboutToAppear)时自动执行一次全量刷新,确保首次展示即显示最新数据。

四、实际应用场景

4.1 弱网场景下的自适应策略

functiongetNetworkQuality():'excellent'|'good'|'poor'{constsignals=radio.getSignalInformationSync(0);if(signals.length===0)return'poor';constlevel=signals[0].signalLevel;if(level>=4)return'excellent';if(level>=2)return'good';return'poor';}// 根据网络质量调整视频清晰度constquality=getNetworkQuality();if(quality==='poor'){videoPlayer.setResolution('360p');}elseif(quality==='good'){videoPlayer.setResolution('720p');}else{videoPlayer.setResolution('1080p');}

4.2 5G 能力检测

functionsupports5G():boolean{constrt=radio.getRadioTechSync(0);returnrt.psRadioTech===radio.RadioTechnology.RADIO_TECHNOLOGY_NR;}asyncfunctionis5GConnected():Promise<boolean>{constns=awaitradio.getNetworkState(0);returnns.nsaState===radio.NsaState.NSA_STATE_DUAL_CONNECTED;}

4.3 SIM 卡异常检测

functioncheckSimReady():string{constst=sim.getSimStateSync(0);switch(st){casesim.SimState.SIM_STATE_READY:return'OK';casesim.SimState.SIM_STATE_NOT_PRESENT:return'请插入 SIM 卡';casesim.SimState.SIM_STATE_LOCKED:return'SIM 卡已锁定,请解锁';casesim.SimState.SIM_STATE_NOT_READY:return'SIM 卡初始化中...';default:return'SIM 卡异常';}}

五、与网络诊断三层体系的协作

@ohos.telephony.radio/sim与之前介绍的@ohos.net.connection@ohos.wifiManager共同构成了 HarmonyOS 网络诊断的三层体系:

层次模块关注点核心 API
连接层@ohos.net.connection有没有网?走哪条通道?hasDefaultNetSync, getNetCapabilitiesSync
通道层@ohos.wifiManager / telephony.radioWiFi 还是蜂窝?信号多强?isWifiActive, getRadioTechSync, getSignalInformationSync
身份层telephony.sim / deviceInfo谁的网?哪个运营商?getSimStateSync, getISOCountryCodeForSimSync

三层结合可实现精确的网络诊断:

  • 连接层判断:设备是否接入网络?(hasDefaultNetSync
  • 通道层判断:WiFi 还是蜂窝?信号如何?(radio 信号等级 + WiFi 信号强度)
  • 身份层判断:SIM 卡是否就绪?哪个国家/运营商?

六、总结

@ohos.telephony.radio@ohos.telephony.sim是 HarmonyOS NEXT 中获取蜂窝网络信息的核心模块。通过本文的学习,你应该已经掌握:

  1. 双模块职责分离:radio 负责无线接入技术查询和信号信息获取(getRadioTechSyncgetSignalInformationSyncgetNetworkState),sim 负责 SIM 卡状态和运营商识别(getSimStateSyncgetISOCountryCodeForSimSync
  2. RadioTechnology 全谱系:从 GSM(2G)到 NR(5G),9 个枚举值覆盖全部蜂窝代际,PS 域和 CS 域分别指示数据和语音承载方式
  3. 信号强度可视化signalLevel(0-5)驱动 5 段信号格 + 颜色分级(绿/蓝/黄/红/灰),直观展示信号质量
  4. 5G NSA 状态精确感知:5 种 NsaState 枚举值详细描述从"不支持"到"EN-DC 双连接激活"的全过程
  5. RegState 识别:4 种注册状态(无服务/已注册/仅紧急呼叫/无线关闭)覆盖全部网络可用性场景

@ohos.telephony.radio/sim的最佳使用模式可以总结为:

应用启动时用 getRadioTechSync + getSimStateSync 建立网络画像,网络请求前用 getSignalInformationSync 判断信号质量决定资源策略,异常场景用 RegState 和 SimState 枚举精确定位问题根源。所有基础查询均为同步 API——零延迟、无权限。

蜂窝网络信息是移动应用的基础能力。@kit.TelephonyKit通过 radio 和 sim 两个子模块的职责分离,将复杂的蜂窝网络协议栈简化为几个清晰的枚举和同步方法。与@ohos.net.connection(网络连通检测)和@ohos.wifiManager(WiFi 管理)配合,开发者可以构建完整的"连接 + 通道 + 信号"三层网络诊断工具,覆盖从网络可用性到信号质量的全部维度。

http://www.jsqmd.com/news/1250231/

相关文章:

  • 深入解析TMS320C5x DSP架构:哈佛结构、外设协同与低功耗设计实战
  • 2026梧州黄金回收白银回收铂金回收工商备案可查全城上门回收旧金老店联系方式推荐
  • Linux Makefile 超全详解:从原理、语法到企业级实战
  • TMS320C6418 DSP时序参数深度解析:从理论到硬件设计实践
  • 2026济南除甲醛检测口碑榜:认准这几家才放心 - 资讯快报
  • 2026 视频去水印在线工具有哪些?免费在线网站怎么选 - 免费软件工具方法教程
  • 给 AI 装上“资深工程师大脑“:Superpowers 方法论全解
  • SEO团队职能转型:如何用见川GEO实现生成式搜索优化?
  • 全球80000余座大型国际机场、地区性通航机场、水上飞机起降点分布矢量数据
  • 杭州工业设备服务GEO城市合伙人选型推荐哪家靠谱?从技术底座到合伙人权益的七维深度拆解 - 小随科技
  • 2026成都装修公司存量房整装甄选指南:旧房翻新实测对比(附6大品牌筛选标准) - 资讯快报
  • 元初混沌 6G 全域通感一体化体系架构 第一卷 第五十五篇 高可靠低时延五行闭环控制系统
  • 文字转语音,原来如此简单!
  • 企业老板必看:2026年GEO和SEO的区别及如何抓住AI搜索红利? - 品牌报告
  • 深入解析TI C6000 DSP EMIF HOLD/HOLDA总线仲裁时序设计与工程实践
  • AI绘图实战:把人类演化时间轴做成3D写实信息图
  • 深入解析以太网PHY芯片TLK111:从DAC/ADC到自适应均衡的完整架构
  • IntelliJ IDEA 2026.2 最新发布
  • 2026 孕妇养生零食品牌选型全攻略:正规合规服务商盘点 + 避坑 FAQ - 商业大观
  • 能一键发布到 Facebook、Instagram、TikTok 吗?2026 年 6 款多平台发布工具评测 - SocialEcho社媒管理
  • “VLA-TVA”协同架构:打造具身智能“执行力”闭环(系列)
  • 元初混沌 6G 全域通感一体化体系架构 第一卷 第五十六篇 全网能耗五行均衡优化模型
  • 2026家庭囤货零食靠谱品牌甄选盘点:全品类合规实力品牌详解、多场景适配指南及合作避坑常见FAQ - 产业观察报
  • Nginx启动关闭命令
  • 2026成都装修公司避坑攻略:整装半包预算把控方案(附6大品牌质保对比) - 资讯快报
  • 杭州亲子教育服务GEO城市合伙人选型推荐哪家靠谱:代理加盟前必须看懂的七大核心维度 - 企业新闻快传
  • 露易丝·海的诗歌17
  • 【代码随想录算法训练营第33天】动态规划part02 |62.不同路径 | 343.整数拆分 | 96.不同的二叉搜索树
  • 康谋业务全景速览|自动驾驶仿真、数据闭环、机器人与院校实训一站式方案
  • TVP5151视频解码芯片中断机制详解与嵌入式系统配置实战