第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 的自动切换策略
相关推荐
hhhjhl1 小时前
开源鸿蒙平台 KMP_CMP 三方库「Clikt」适配全流程
华为·开源·harmonyos
熊猫钓鱼>_>2 小时前
四种书签,一条时间线:一个读书 App 的记忆颗粒与它的边界案例【鸿蒙心迹】
开发语言·华为·ai编程·harmonyos·鸿蒙·openharmony·鸿蒙pc
Goway_Hui2 小时前
【KMP for OpenHarmony】-- 在鸿蒙工程中使用 Apollo-Kotlin
华为·kotlin·harmonyos
正在走向自律4 小时前
HarmonyOS 手机/平板远程控制 Windows 电脑实践指南
智能手机·电脑·harmonyos·todesk·远程工具
熊猫钓鱼>_>5 小时前
鸿蒙 PC 三方库适配复盘:libfvad 1.0 —— 把 WebRTC VAD 做成能装进采集链路的静态库
服务器·开发语言·华为·harmonyos·openharmony·适配·鸿蒙pc
aqi005 小时前
AI编程让鸿蒙开发电子书APP更加快捷
android·华为·harmonyos·鸿蒙·harmony
熊猫钓鱼>_>6 小时前
鸿蒙PC高分屏与键鼠交互适配:DPI缩放、右键菜单一次讲清
开发语言·笔记·华为·ai编程·harmonyos·鸿蒙·鸿蒙心迹
Goway_Hui6 小时前
【KMP for OpenHarmony】Cache4k 0.14.0 鸿蒙适配
华为·kotlin·harmonyos
SZYSK7 小时前
OpenHarmony 上读卡、推理和双屏刷新抢 CPU:核验机与消费机的调度差
物联网·算法·harmonyos·1024程序员节