#跟着坚果学鸿蒙#场景介绍 应用通常需要获取用户所在蜂窝网络下信号信息,以便获取当前驻网质量。开发 者可以通过本业务,获取到用户指定 SIM 卡当前所在网络下的信号信息。

接口说明 RadioInfoManager 类中提供了获取当前网络信号信息列表的方法。

开发步骤 1. 调用 RadioInfoManager 的 getInstance 接口,获取到 RadioInfoManager 实例。 2. 调用 getSignalInfoList(slotId)方法,返回所有 SignalInformation 列表。 3. 遍历 SignalInformation 列表,并分别根据 signalNetworkType 转换为对应制式的 SignalInformation 子类对象。 4. 调用子类中的方法,获取信号强度信息。

// 获取 RadioInfoManager 对象。 
RadioInfoManager radioInfoManager = 
RadioInfoManager.getInstance(context); 
// 获取信号信息。 
List<SignalInformation> signalList = 
radioInfoManager.getSignalInfoList(slotId); 
 
// 检查信号信息列表大小。 
if (signalList.size() == 0) { 
 return; 
} 
// 依次遍历 list 获取当前驻网 networkType 对应的信号信息。 
LteSignalInformation lteSignal; 
for (SignalInformation signal : signalList) { 
 int signalNetworkType = signal.getSignalNetworkType(); 
 if (signalNetworkType == TelephonyConstants.NETWORK_TYPE_LTE) { 
 lteSignal = (LteSignalInformation) signal; 
 } 
} 
// 调用子类中相应方法,获取对应制式的信号强度信息。 
int signalLevel = lteSignal.getSignalLevel(); 

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

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

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

开发步骤 添加观察事件 1. 调用 RadioInfoManager 的 getInstance 接口,获取到 RadioInfoManager 实例。 2. 创建继承 RadioStateObserver 的类 MyRadioStateObserver,并覆写状态变化回调方法。 3. 创建 MyRadioStateObserver 的对象 observer。 4. 调用 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 实例。 2. 调用 RadioInfoManager 的 removeObserver 方法,传入添加观察事件时创建的 MyRadioStateObserver 对象 observer。

// 获取 RadioInfoManager 对象。 
RadioInfoManager radioInfoManager = 
RadioInfoManager.getInstance(context); 
// 停止观察 
radioInfoManager.removeObserver(observer); 

 

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐