接口说明
RadioStateObserver类中提供了观察蜂窝网络状态变化的方法,为了能够实时观察蜂窝网络状态变化,应用必须包含以下权限。
观察状态名称 |
权限名称 |
---|---|
网络状态信息(NETWORK_STATE) |
ohos.permission.GET_NETWORK_INFO |
信号信息(SIGNAL_INFO) |
NA |
需要使用RadioInfoManager的如下接口将继承RadioStateObserver类的对象注册到系统服务:
接口名 |
观察事件的掩码 |
描述 |
---|---|---|
addObserver |
OBSERVE_MASK_NETWORK_STATE |
观察蜂窝网络驻网状态信息。 |
OBSERVE_MASK_SIGNAL_INFO |
观察蜂窝网络信号信息。 |
|
removeObserver |
N/A |
停止观察所有状态的变化。 |
开发步骤
添加观察事件
- 调用RadioInfoManager的getInstance接口,获取到RadioInfoManager实例。
- 创建继承RadioStateObserver的类MyRadioStateObserver,并覆写状态变化回调方法。
- 创建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);
}
// 网络注册状态变化的回调方法。
public void onNetworkStateUpdated(NetworkState state) {
…
}
// 信号信息变化的回调方法。
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);
停止观察
- 调用RadioInfoManager的getInstance接口,获取到RadioInfoManager实例。
调用RadioInfoManager的removeObserver方法,传入添加观察事件时创建的MyRadioStateObserver对象observer。
// 获取RadioInfoManager对象。
RadioInfoManager radioInfoManager = RadioInfoManager.getInstance(context);
// 停止观察
radioInfoManager.removeObserver(observer);