
回复
状态注册主要负责提供电话服务子系统各种消息事件的订阅以及取消订阅的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 # 测试相关
表 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 |
以订阅通话状态变化事件为例,主要步骤和代码如下:
不同的事件指定不同的type,传入参数,调用on方法(开启订阅)或once方法(一次性订阅)。
收到回调后,若err为空,则订阅成功,否则订阅失败。订阅成功则可以从value中获取数据。
可以通过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