HarmonyOS-鸿蒙app开发 —基于java电话服务_观察蜂窝网络状态变化

HarmonyOS-鸿蒙app开发 —基于java电话服务_观察蜂窝网络状态变化

场景介绍

应用可以通过观察蜂窝网络状态变化,来接收最新蜂窝网络服务状态信息、信号信息等。

接口说明

RadioStateObserver类中提供了观察蜂窝网络状态变化的方法,为了能够实时观察蜂窝网络状态变化,应用必须包含以下权限。

表1 观察蜂窝网络状态变化需要的权限

观察状态名称

权限名称

网络状态信息(NETWORK_STATE)

ohos.permission.GET_NETWORK_INFO

信号信息(SIGNAL_INFO)

NA

需要使用RadioInfoManager的如下接口将继承RadioStateObserver类的对象注册到系统服务:

表2 添加观察和停止观察接口API介绍

接口名

观察事件的掩码

描述

addObserver

OBSERVE_MASK_NETWORK_STATE

观察蜂窝网络驻网状态信息。

OBSERVE_MASK_SIGNAL_INFO

观察蜂窝网络信号信息。

removeObserver

N/A

停止观察所有状态的变化。

开发步骤

添加观察事件

  1. 调用RadioInfoManager的getInstance接口,获取到RadioInfoManager实例。
  2. 创建继承RadioStateObserver的类MyRadioStateObserver,并覆写状态变化回调方法。
  3. 创建MyRadioStateObserver的对象observer。

调用RadioInfoManager的addObserver方法,传入已创建的MyRadioStateObserver对象observer和需要观察的mask。

// 获取RadioInfoManager对象。

RadioInfoManager radioInfoManager = RadioInfoManager.getInstance(context);

// 创建继承RadioStateObserver的类MyRadioStateObserver

class MyRadioStateObserver extends RadioStateObserver {

// 构造方法,在当前线程的runner中执行回调,slotId需要传入要观察的卡槽ID(0或1)。

MyRadioStateObserver(int slotId) {

super(slotId);

}

 

// 构造方法,在执行runner中执行回调。

MyRadioStateObserver(int slotId, EventRunner runner) {

super(slotId, runner);

}

 

// 网络注册状态变化的回调方法。

@Override

public void onNetworkStateUpdated(NetworkState state) {

}

 

// 信号信息变化的回调方法。

@Override

public void onSignalInfoUpdated(List<SignalInformation> signalInfos) {

}

}

 

// 执行回调的runner。

EventRunner runner = EventRunner.create();

 

// 创建MyRadioStateObserver的对象。

MyRadioStateObserver observer = new MyRadioStateObserver(slotId, runner);

 

// 添加回调,以NETWORK_STATE和SIGNAL_INFO为例。

radioInfoManager.addObserver(observer, RadioStateObserver.OBSERVE_MASK_NETWORK_STATE | RadioStateObserver.OBSERVE_MASK_SIGNAL_INFO);

停止观察

  1. 调用RadioInfoManager的getInstance接口,获取到RadioInfoManager实例。

调用RadioInfoManager的removeObserver方法,传入添加观察事件时创建的MyRadioStateObserver对象observer。

// 获取RadioInfoManager对象。

RadioInfoManager radioInfoManager = RadioInfoManager.getInstance(context);

// 停止观察

radioInfoManager.removeObserver(observer);

🚀 如未找到文章请搜索栏搜素 | Ctrl+D收藏本站 | 联系邮箱:15810050733@qq.com