关于鸿蒙系统的状态注册你懂多少?

微生香岚
发布于 2021-9-14 17:31
浏览
0收藏

简介

状态注册主要负责提供电话服务子系统各种消息事件的订阅以及取消订阅的API。事件类型包括网络状态变化、信号强度变化、小区信息变化、蜂窝数据连接状态变化、通话状态变化等等。

图 1 状态注册架构图 关于鸿蒙系统的状态注册你懂多少?-鸿蒙开发者社区

目录

/base/telephony/state_registry      # 状态注册转发服务
├─ BUILD.gn                         # 编译gn脚本
├─ README.md                        # Readme文档
├─ interfaces                       # API,js文件
├─ service
│  ├─ include                       # 头文件
│  └─ src                           # 源文件
├─ sa_profile                       # sa文件
├─ ohos.build                       # 编译build
└─ test                             # 测试相关

约束

  • 开发语言:JavaScript。
  • 软件上,需要与以下服务配合使用:Telephony核心服务(core_service)。
  • 硬件上,需要搭载的设备支持以下硬件:可以进行独立蜂窝通信的Modem以及SIM卡。
  • 使用场景:注册获取SIM卡状态接口仅针对有SIM卡在位场景生效,若用户拔出SIM卡,则接收不到回调事件。应用可通过调用getSimState接口来确定当前卡槽是否有卡在位。

说明

接口说明

表 1 注册接口

接口定义 接口描述
function on(type: String, options: { slotId?: number }, callback: AsyncCallback<T>): void; 开启订阅
function off(type: String, callback?: AsyncCallback<T>): void; 关闭订阅
function once(type: String, options: { slotId?: number }, callback: AsyncCallback<T>): void; 一次性订阅

使用说明

订阅接口参数说明

不同订阅事件通过type进行区分,type列表如下:

表 2 type参数说明

type参数 说明 所需权限
networkStateChange 网络状态变化事件 ohos.permission.GET_NETWORK_INFO
signalInfoChange 信号变化事件
cellularDataConnectionStateChange 蜂窝数据连接状态事件
cellularDataFlowChange 蜂窝数据流变化事件
callStateChange 通话状态变化事件,其中phoneNumber没有权限返回空字符串 ohos.permission.READ_CALL_LOG

接口调用代码示例

以订阅通话状态变化事件为例,主要步骤和代码如下:

  1. 不同的事件指定不同的type,传入参数,调用on方法(开启订阅)或once方法(一次性订阅)。

  2. 收到回调后,若err为空,则订阅成功,否则订阅失败。订阅成功则可以从value中获取数据。

  3. 可以通过off方法取消订阅。取消订阅之后,不会再收到任何回调。

    // 引入包名
    import observer from '@ohos.telephony.observer';
    
    // 开启订阅
    observer.on('callStateChange', {slotId: 1}, (err, value) => {
      if (err) {
        // 接口调用失败,err非空
        console.error(`failed, because ${err.message}`);
        return;
      }
      // 接口调用成功,err为空
      console.log(`success on. number is ` + value.number + ", state is " + value.state);
    });
    
    // 只订阅一次
    observer.once('callStateChange', {slotId: 1}, (err, value) => {
      if (err) {
        // 接口调用失败,err非空
        console.error(`failed, because ${err.message}`);
        return;
      }
      // 接口调用成功,err为空
      console.log(`success once. number is ` + value.number + ", state is " + value.state);
    });
    
    // 关闭订阅
    observer.off('callStateChange', (err, value) => {
      if (err) {
        // 接口调用失败,err非空
        console.error(`failed, because ${err.message}`);
        return;
      }
      // 接口调用成功,err为空
      console.log(`success off`);
    });
    

相关仓

电话服务子系统

telephony_state_registry

telephony_core_service

telephony_cellular_call

telephony_call_manager

分类
telephony_state_registry-master.zip 101.59K 9次下载
已于2021-9-14 17:31:56修改
收藏
回复
举报
回复
    相关推荐