0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙开发实战:【电话服务子系统】

jf_46214456 ? 来源:jf_46214456 ? 作者:jf_46214456 ? 2024-03-14 21:49 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

简介

电话服务子系统,提供了一系列的API用于获取无线蜂窝网络和SIM卡相关的一些信息。应用可以通过调用API来获取当前注册网络名称、网络服务状态、信号强度以及SIM卡的相关信息。

各个模块主要作用如下:

  • 核心服务模块:主要功能是初始化RIL管理、SIM卡和搜网模块。
  • 通话管理模块:主要功能是管理CS(Circuit Switch,电路交换)、IMS(IP Multimedia Subsystem,IP多媒体子系统)和OTT(over the top,OTT解决方案)三种类型的通话,申请通话所需要的音视频资源,处理多路通话时产生的各种冲突。
  • 蜂窝通话模块:主要功能是实现基于运营商网络的基础通话。
  • 蜂窝数据模块:主要功能是实现基于运营商网络的蜂窝数据上网。
  • 短彩信模块:主要功能是短信收发和彩信编解码。
  • 状态订阅模块:主要功能是提供电话服务子系统各种消息事件的订阅以及取消订阅的API。
  • 数据存储模块:主要功能是持久化数据存储,提供DataAbility访问接口
  • RIL Adapter模块: 主要功能是与modem通信接口的适配。

图 1 子系统架构图

目录

base/telephony/
├── core_service            # 核心服务
├── call_manager            # 通话管理
├── cellular_call           # 蜂窝通话
├── cellular_data           # 蜂窝数据
├── sms_mms                 # 短彩信
├── state_registry          # 状态订阅
├── data_storage            # 数据存储
└── ril_adapter             # RIL Adapter

约束

  1. 目前开源的范围包括蜂窝通话(仅支持CS通话)、短信、数据上网,支持双SIM卡框架。
  2. 南向HDI依赖芯片厂商适配。

使用说明

具体请参考子模块README,下面以获取当前蜂窝网络信号信息和观察蜂窝网络状态变化为例,说明电话服务子系统接口调用请求和状态订阅的使用方法。

获取当前蜂窝网络信号信息

  1. 从@ohos.telephony.radio.d.ts中导入radio命名空间。
  2. 可以通过callback或者Promise的方式调用getSignalInformation(slotId: number)方法。
  3. 该接口为异步接口,结果会从callback中返回SignalInformation数组。
  4. 遍历SignalInformation数组,获取不同制式(signalType)的信号强度(signalLevel)。
    // 引入包名
    import radio from "@ohos.telephony.radio";
    
    // 参数赋值
    let slotId = 0;
    
    // 调用接口【callback方式】
    radio.getSignalInformation(slotId, (err, value) = > {
      if (err) {
        // 接口调用失败,err非空
        console.error(`failed to getSignalInformation because ${err.message}`);
        return;
      }
      // 接口调用成功,err为空
      for (let i = 0; i < value.length; i++) {
        console.log(`success to getSignalInformation: type is ${value[i].signalType}, level is ${value[i].signalLevel}`);
      }
    });
    
    // 调用接口【Promise方式】
    let promise = radio.getSignalInformation(slotId);
    promise.then((value) = > {
      // 接口调用成功,此处可以实现成功场景分支代码。
      for (let i = 0; i < value.length; i++) {
        console.log(`success to getSignalInformation: type is ${value[i].signalType}, level is ${value[i].signalLevel}`);
      }
    }).catch((err) = > {
      // 接口调用失败,此处可以实现失败场景分支代码。
      console.error(`failed to getSignalInformation because ${err.message}`);
    });
    

观察蜂窝网络状态变化

添加观察事件

  1. 从@ohos.telephony.observer.d.ts中导入observer命名空间。
  2. 调用on(type: 'networkStateChange')方法,传入卡槽id(slotId)和收到事件的回调处理函数(callback),其中slotId为可选参数。
  3. 当网络状态发生变更时,调用者会收到回调。
    // 引入包名
    import observer from '@ohos.telephony.observer';
    
    // 开启订阅
    observer.on('networkStateChange', {slotId: 0}, (value) = > {
      console.log(`network state is ` + value);
    });
    

停止观察

  1. 从@ohos.telephony.observer.d.ts中导入observer命名空间。

  2. 调用off(type: 'networkStateChange')方法,传入添加观察事件时的callback对象(可选)。

    // 引入包名
    import observer from '@ohos.telephony.observer';
    
    // 关闭订阅
    observer.off('networkStateChange');
    

    审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • API
    API
    +关注

    关注

    2

    文章

    1716

    浏览量

    64531
  • 蜂窝网络
    +关注

    关注

    2

    文章

    212

    浏览量

    22569
  • 鸿蒙
    +关注

    关注

    60

    文章

    2658

    浏览量

    44357
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【HarmonyOS 5】金融应用开发鸿蒙组件实践

    【HarmonyOS 5】金融应用开发鸿蒙组件实践 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##
    的头像 发表于 07-11 18:20 ?380次阅读
    【HarmonyOS 5】金融应用<b class='flag-5'>开发</b><b class='flag-5'>鸿蒙</b>组件实践

    鸿蒙5开发宝藏案例分享---一多开发实例(音乐)

    关联实际开发中的高频痛点,比如内存泄漏、跨端适配、服务卡片设计等。我整理了一份超全解读,带你解锁鸿蒙开发的“隐藏Buff”! 一、动态布局实战
    的头像 发表于 06-30 11:54 ?409次阅读

    迅为RK3568开发板驱动指南GPIO子系统GPIO子系统API函数的引入

    迅为RK3568开发板驱动指南GPIO子系统GPIO子系统API函数的引入
    的头像 发表于 05-29 14:05 ?527次阅读
    迅为RK3568<b class='flag-5'>开发</b>板驱动指南GPIO<b class='flag-5'>子系统</b>GPIO<b class='flag-5'>子系统</b>API函数的引入

    迅为RK3568驱动指南GPIO子系统实战:实现动态切换引脚复用功能

    迅为RK3568驱动指南GPIO子系统实战:实现动态切换引脚复用功能
    的头像 发表于 05-22 14:27 ?1072次阅读
    迅为RK3568驱动指南GPIO<b class='flag-5'>子系统</b><b class='flag-5'>实战</b>:实现动态切换引脚复用功能

    开源鸿蒙开发新体验,开鸿Bot系列今日开启预售!

    开发者大礼包,其中含KaihongOS桌面版镜像包、KaihongOS桌面版二次开发包、实战课程、烧录指南等。同时,用户还可享受一对一技术顾问服务、优先体验新版本KaihongOS
    发表于 05-16 14:13

    鸿蒙服务实战-笑笑五子棋(1)

    鸿蒙服务实战-笑笑五子棋(1) 前言 作为鸿蒙应用的深度开发者都应该知道,经历了 波澜壮阔 12 月风波 ,到 2025 年新的开始。鸿蒙
    的头像 发表于 03-31 09:23 ?346次阅读
    <b class='flag-5'>鸿蒙</b>元<b class='flag-5'>服务实战</b>-笑笑五子棋(1)

    本周三晚7点!《手把手教你做PC》第四课:驱动子系统开发流程上-KHDF

    本周三晚七点,《KaihongOS笔记本电脑开发实战④——驱动子系统开发流程上-KHDF》即将启动!本次课程旨在帮助开发者了解KaihongOS驱动
    的头像 发表于 03-10 17:32 ?362次阅读
    本周三晚7点!《手把手教你做PC》第四课:驱动<b class='flag-5'>子系统开发</b>流程上-KHDF

    《HarmonyOS第一课》焕新升级,赋能开发者快速掌握鸿蒙应用开发

    全局思维的人才,使其能够独立完成中大型应用和元服务开发、架构设计等复杂任务。涵盖中大型应用架构设计、鸿蒙特性开发、性能调优等核心技能,要求学员熟练掌握HarmonyOS各
    发表于 01-02 14:24

    鸿蒙Flutter实战:14-现有Flutter 项目支持鸿蒙 II

    分别安装官方的3.22版本,以及鸿蒙社区的 3.22.0 版本 3.搭建 Flutter鸿蒙开发环境 参考文章《鸿蒙Flutter实战:0
    发表于 12-26 14:59

    名单公布!【书籍评测活动NO.53】鸿蒙操作系统设计原理与架构

    操作系统从2019年8月9日正式发布,历时1778天,历经4代,鸿蒙生态设备数量已超过9亿,已有254万HarmonyOS开发者投入到鸿蒙世界的开发
    发表于 12-16 15:10

    鸿蒙原生开发手记:03-元服务开发全流程(开发服务,只需要看这一篇文章)

    获取和使用 相较于小程序系统原生丝滑流畅 轻量应用程序形态具备秒开直达纯净清爽服务相伴恰合时宜即用即走账号相随一体两面嵌入运行原生智能全域搜索高效开发生而可信等特征。 特点 秒开直达即开即用无开屏
    发表于 11-23 21:52

    鸿蒙原生开发手记:01-元服务开发

    简介 元服务鸿蒙中的一种轻量应用形态,无需下载,直接运行。类似于微信小程序,但与小程序不同的是,元服务更加轻量。 元服务使用原生开发,是
    发表于 11-14 17:28

    鸿蒙Flutter实战:09-现有Flutter项目支持鸿蒙

    # 鸿蒙Flutter实战:现有Flutter项目支持鸿蒙 ## 背景 原来使用Flutter开发的项目,需要适配鸿蒙。 ## 环境搭
    发表于 10-23 16:36

    鸿蒙Flutter实战:08-如何调试代码

    # 鸿蒙Flutter实战:如何调试代码 ## 1.环境搭建 参考文章[鸿蒙Flutter实战:01-搭建开发环境](https://g
    发表于 10-23 16:29

    鸿蒙Flutter实战:07混合开发

    # 鸿蒙Flutter实战:混合开发 鸿蒙Flutter混合开发主要有两种形式。 ## 1.基于har 将flutter module
    发表于 10-23 16:00