#跟着坚果学鸿蒙#获取当前蜂窝网络信号信息
#跟着坚果学鸿蒙#场景介绍 应用通常需要获取用户所在蜂窝网络下信号信息,以便获取当前驻网质量。开发 者可以通过本业务,获取到用户指定 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);
更多推荐
所有评论(0)