第25章_HarmonyOs开发图解之 电话服务

第25章 HarmonyOs开发图解之 电话服务

HarmonyOS 学习系统 | 阶段四:专业精通期


学习目标

序号 能力
1 掌握 RadioInfoManager 获取信号信息和网络类型
2 能够使用 RadioStateObserver 监听信号和网络状态变化
3 理解蜂窝网络类型(GPRS/LTE/5G NR)的含义

核心图解

内容讲解

25.1 电话服务概述

HarmonyOS 的电话服务模块通过 RadioInfoManager 提供蜂窝网络的信息查询和状态监听能力。开发者可以获取当前信号强度、网络类型(2G/3G/4G/5G)、SIM 卡状态等信息。

生活化类比:RadioInfoManager 就像"信号侦探"

想象你是一个信号侦探,装备了一台信号检测仪(RadioInfoManager)。你可以随时检测当前的信号有多强(getSignalInfoList)、手机连的是哪种网络(NetworkType:5G/LTE/3G),以及网络服务状态(网络是否可用)。RadioStateObserver 则像你雇了一个助手,他会持续帮你盯着信号变化,一旦信号从 5G 掉到 4G,他会立刻通知你。

25.2 网络类型对照表

NetworkType 值 网络类型 说明
0 UNKNOWN 未知网络
1 GPRS 2.5G
2 CDMA 2G CDMA
3 EVDO 3G CDMA
4 WCDMA 3G WCDMA
5 LTE 4G
6 NR 5G(New Radio)

25.3 信号信息获取与状态监听

java 复制代码
// 获取信号信息
RadioInfoManager radioInfoManager = RadioInfoManager.getInstance(context);
List<SignalInformation> signalList =
    radioInfoManager.getSignalInfoList(0); // slotId=0 主卡
for (SignalInformation signal : signalList) {
    HiLog.info(TAG, "网络类型: " + signal.getNetworkType()
        + ", 信号等级: " + signal.getSignalLevel());
}

// 注册状态观察者
class MyRadioStateObserver extends RadioStateObserver {
    public MyRadioStateObserver(int slotId) { super(slotId); }

    @Override
    public void onNetworkStateUpdated(NetworkState state) {
        HiLog.info(TAG, "网络状态更新: " + state.getState());
    }

    @Override
    public void onSignalInfoUpdated(List<SignalInformation> signalInfoList) {
        for (SignalInformation signal : signalInfoList) {
            HiLog.info(TAG, "信号变化: type=" + signal.getNetworkType()
                + ", level=" + signal.getSignalLevel());
        }
    }
}

// 添加/移除观察者
MyRadioStateObserver observer = new MyRadioStateObserver(0);
radioInfoManager.addObserver(observer);
// radioInfoManager.removeObserver(observer);

25.4 SIM 卡状态检查

java 复制代码
// 检查 SIM 卡是否在位
boolean hasSim = radioInfoManager.hasSimCard(0); // slotId=0
if (!hasSim) {
    showTip("请插入 SIM 卡");
    return;
}

代码速查卡

API 功能 示例
RadioInfoManager.getInstance(context) 获取电话服务管理实例 RadioInfoManager.getInstance(context)
getSignalInfoList(slotId) 获取信号信息列表 radioInfoManager.getSignalInfoList(0)
hasSimCard(slotId) 检查 SIM 卡是否在位 radioInfoManager.hasSimCard(0)
addObserver(observer) 注册状态观察者 radioInfoManager.addObserver(observer)
removeObserver(observer) 移除状态观察者 radioInfoManager.removeObserver(observer)
signal.getNetworkType() 获取网络类型 signal.getNetworkType()
signal.getSignalLevel() 获取信号等级 signal.getSignalLevel()

与 Android/iOS 对比

特性 HarmonyOS Android iOS
信号信息 RadioInfoManager TelephonyManager CTTelephonyNetworkInfo
状态监听 RadioStateObserver PhoneStateListener NotificationCenter
网络类型 SignalInformation NetworkType CTRadioAccessTechnology
SIM 卡检查 hasSimCard() getSimState() CTTelephonyNetworkInfo

⚠️ 踩坑回忆录

拔掉 SIM 卡后应用崩溃了

我的信号监听 App 在没有 SIM 卡的设备上直接崩溃,因为没有处理 getSignalInfoList 返回空列表或 null 的情况。正确做法是先调用 hasSimCard(slotId) 检查 SIM 卡是否在位,不在位时给出提示而非继续操作。

另外,RadioStateObserver 在不需要时一定要记得 removeObserver(),否则会造成内存泄漏,Ability 销毁后观察者还在被系统回调。


必做实操任务

序号 任务 难度
1 获取并展示当前信号强度和网络类型
2 实现信号变化的实时监听 UI
3 检查 SIM 卡状态并展示双卡信息
4 实现网络类型变化的提示(如从 5G 降到 4G)
5 实现一个信号监测仪表盘 App

学习检查清单

  • 能使用 RadioInfoManager 获取信号信息
  • 能区分 2G/3G/4G/5G 网络类型
  • 能使用 RadioStateObserver 监听信号变化
  • 知道为什么要先检查 SIM 卡状态
  • 能正确添加和移除状态观察者
  • 理解 slotId 的含义(双卡场景)
  • 能处理无 SIM 卡的异常情况
  • 知道 5G NR 对应的 NetworkType 值

进阶方向

  • 实现基于网络类型的智能策略(如 5G 时高清播放,4G 时标清播放)
  • 结合第 24 章网络管理,实现综合网络质量评估
  • 探索蜂窝网络和 WLAN 的自动切换策略
    无 SIM 卡的异常情况
  • 知道 5G NR 对应的 NetworkType 值

进阶方向

  • 实现基于网络类型的智能策略(如 5G 时高清播放,4G 时标清播放)
  • 结合第 24 章网络管理,实现综合网络质量评估
  • 探索蜂窝网络和 WLAN 的自动切换策略
相关推荐
Magic-ZYJ13 小时前
HarmonyOS Release 构建安全:ArkGuard 混淆、签名配置与秘密管理
安全·华为·harmonyos·移动应用开发·心晴手记
见山是山-见水是水15 小时前
拆解HarmonyOS网络请求适配:原生鸿蒙页面的实现路径与调试方法
华为·harmonyos
m0_7496902315 小时前
【寻迹校园 HarmonyOS NEXT 实战 36】深色模式不是反色:用语义 Token 管理品牌色与状态色
harmonyos·arkts·深色模式·ui设计·主题设计
lqj_本人16 小时前
鸿蒙跨端实战_QT后台切换导致OpenGLES上下文丢失:黑屏自救指南
qt·华为·harmonyos
OH_TPC18 小时前
HarmonyOS APP开发---“数据眼“健康追踪App,需要用到这个库
华为·harmonyos·鸿蒙
lilian23318 小时前
Harmony os 技术实战|拼豆制图49:五组分类视觉规则如何收口成一张配置表
华为·harmonyos
2501_9197490319 小时前
华为鸿蒙免费决策APP—小羊挠头
华为·harmonyos·鸿蒙
m0_7496902319 小时前
【寻迹校园 HarmonyOS NEXT 实战 37】一套 ArkUI 适配四档宽度:sm、md、lg、xl 响应式 Shell 实战
华为·harmonyos·arkui·navigation·响应式布局·多设备适配
RisunJan21 小时前
HarmonyOS 架构精读:从系统分层到应用模型
华为·架构·harmonyos
见山是山-见水是水21 小时前
从需求到页面:鸿蒙原生 Ability 与 ArkTS 交互的 ArkTS 原生实现
华为·harmonyos