聊一聊鸿蒙系统的电话核心服务模块

微生香岚
发布于 2021-9-9 21:15
浏览
0收藏

简介

电话核心服务模块主要功能是初始化RIL管理、SIM卡和搜网模块,以及获取RIL Adapter服务。

通过注册回调服务,实现与RIL Adapter进行通信;通过发布订阅,来实现与各功能模块的通信。

图 1 电话核心服务架构图

聊一聊鸿蒙系统的电话核心服务模块-鸿蒙开发者社区

上图示中电话核心服务关联的业务服务包括SIM卡服务、搜网服务、RIL通信管理。

  • SIM卡服务:主要是SIM卡初始化,文件读写,加载状态通知,单双卡控制。包括SIM卡状态查询、SIM卡管理、SIM卡控制、STK、联系人存储、短信存储。
  • 搜网服务:主要是网络注册,网络状态获取。包括网络注册、网络模式查询、Radio状态查询、搜网管理、信号强度查询、小区管理、驻网管理、时间时区更新。
  • RIL管理:提供主动回调服务,查询结果回调服务等。

目录

/base/telphony/core_service
├── interfaces             # 接口目录
│   ├── innerkits          # 部件间的内部接口
│   └── kits               # 对应用提供的接口(例如JS接口)
├── services               # 核心服务实现代码目录
├── etc                    # 核心服务的驱动脚本目录
├── sa_profile             # 核心服务的启动文件目录
├── tel_ril                # 核心服务与RIL Adapter通信代码目录
├── network_search         # 搜网服务代码目录
├── sim                    # SIM卡服务代码目录
└── common

约束

  • 开发语言:Java Script。
  • 软件上,需要与以下服务配合使用:RIL适配(ril_adapter),状态注册服务(state_registry)。
  • 硬件上,需要搭载的设备支持以下硬件:可以进行独立蜂窝通信的Modem以及SIM卡。

接口说明

电话核心服务模块需要提供SIM卡,搜网相关模块的接口。

获取SIM卡信息相关接口

接口名称 接口描述 所需权限
function getSimState(slotId: number, callback: AsyncCallback<SimState>): void; 获取卡状态
function getISOCountryCodeForSim(slotId: number, callback: AsyncCallback<string>): void; 获取国家码
function getSimOperatorNumeric(slotId: number, callback: AsyncCallback<string>): void; 获取运营商数字码
function getSimSpn(slotId: number, callback: AsyncCallback<string>): void; 获取SPN信息

搜网服务相关接口

接口名称 接口描述 所需权限
function getRadioTech(slotId: number, callback: AsyncCallback<{psRadioTech: RadioTechnology, csRadioTech: RadioTechnology}>): void; 获取当前接入技术 ohos.permission.GET_NETWORK_INFO
function getSignalInformation(slotId: number, callback: AsyncCallback<Array<SignalInformation>>): void; 获取信号列表
function getNetworkState(slotId: number, callback: AsyncCallback<NetworkState>): void; 获取网络状态 ohos.permission.GET_NETWORK_INFO

说明: RIL管理不对外暴露接口,其接口可通过电话服务子系统各个模块调用。

使用说明

搜网

以获取网络状态为例,相关流程如下:

  1. 指定查询的slotId,若不指定默认查询主卡信息。

  2. 可以通过callback或者Promise的方式调用getNetworkState方法,返回网络状态信息。

  3. 该接口为异步接口,相关执行结果会从callback中返回。

    import radio from "@ohos.telephony.radio";
    
    // 参数赋值
    let slotId = 1;
    
    // 调用接口【callback方式】
    radio.getNetworkState(slotId, (err, value) => {
      if (err) {
        // 接口调用失败,err非空
        console.error(`failed to getNetworkState because ${err.message}`);
        return;
      }
      // 接口调用成功,err为空
      console.log(`success to getNetworkState: ${value}`);
    });
    
    // 调用接口【Promise方式】
    let promise = radio.getNetworkState(slotId);
    promise.then((value) => {
      // 接口调用成功,此处可以实现成功场景分支代码。
      console.log(`success to getNetworkState: ${value}`);
    }).catch((err) => {
      // 接口调用失败,此处可以实现失败场景分支代码。
      console.error(`failed to getNetworkState because ${err.message}`);
    });
    

SIM卡

以查询指定SIM卡的状态为例,相关流程如下:

  1. 指定查询的slotId。

  2. 可以通过callback或者Promise的方式调用getSimState方法,返回卡状态信息。

  3. 该接口为异步接口,相关执行结果会从callback中返回。

    import sim from "@ohos.telephony.sim";
    
    // 参数赋值
    let slotId = 1;
    
    // 调用接口【callback方式】
    sim.getSimState(slotId, (err, value) => {
      if (err) {
        // 接口调用失败,err非空
        console.error(`failed to getSimState because ${err.message}`);
        return;
      }
      // 接口调用成功,err为空
      console.log(`success to getSimState: ${value}`);
    });
    
    // 调用接口【Promise方式】
    let promise = sim.getSimState(slotId);
    promise.then((value) => {
      // 接口调用成功,此处可以实现成功场景分支代码。
      console.log(`success to getSimState: ${value}`);
    }).catch((err) => {
      // 接口调用失败,此处可以实现失败场景分支代码。
      console.error(`failed to getSimState because ${err.message}`);
    });
    

相关仓

电话服务子系统
telephony_core_service

telephony_sms_mms

分类
telephony_core_service-master.zip 324.67K 13次下载
已于2021-9-9 21:15:11修改
收藏
回复
举报
回复