HarmonyOS学习路之开发篇—网络与连接(电话服务)

简介: 电话服务系统提供了一系列的API用于获取无线蜂窝网络和SIM卡相关的一些信息。

电话服务开发概述

电话服务系统提供了一系列的API用于获取无线蜂窝网络和SIM卡相关的一些信息。


应用可以通过调用RadioInfoManager中的API,来获取当前注册网络名称、网络服务状态以及信号强度等信息;以及调用SimInfoManager中的API,来获取SIM卡的相关信息。


约束与限制

注册获取SIM卡状态接口仅针对有SIM卡在位场景生效,若用户拔出SIM卡,则接收不到回调事件。应用可通过调用hasSimCard接口来确定当前卡槽是否有卡在位。


获取当前蜂窝网络信号信息

场景介绍

应用通常需要获取用户所在蜂窝网络下信号信息,以便获取当前驻网质量。开发者可以通过本业务,获取到用户指定SIM卡当前所在网络下的信号信息。


接口说明

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


表1 RadioInfoManager的主要接口


image.png

image.png

开发步骤

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

2.调用getSignalInfoList(slotId)方法,返回所有SignalInformation列表。

3.遍历SignalInformation列表,并分别根据getNetworkType()转换为对应制式的SignalInformation子类对象。

4.调用子类中的方法,获取信号强度信息。

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

观察蜂窝网络状态变化

场景介绍

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


接口说明

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


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


image.png

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

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

image.png

开发步骤

添加观察事件


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. 1.调用RadioInfoManager的getInstance接口,获取到RadioInfoManager实例。
  2. 2.调用RadioInfoManager的removeObserver方法,传入添加观察事件时创建的MyRadioStateObserver对象observer。
// 获取RadioInfoManager对象。
RadioInfoManager radioInfoManager = RadioInfoManager.getInstance(context);
// 停止观察
radioInfoManager.removeObserver(observer);
相关文章
|
10月前
|
机器学习/深度学习 算法 数据挖掘
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
291 0
|
9月前
|
JavaScript Java 大数据
基于python的网络课程在线学习交流系统
本研究聚焦网络课程在线学习交流系统,从社会、技术、教育三方面探讨其发展背景与意义。系统借助Java、Spring Boot、MySQL、Vue等技术实现,融合云计算、大数据与人工智能,推动教育公平与教学模式创新,具有重要理论价值与实践意义。
|
JSON 中间件 Go
Go 网络编程:HTTP服务与客户端开发
Go 语言的 `net/http` 包功能强大,可快速构建高并发 HTTP 服务。本文从创建简单 HTTP 服务入手,逐步讲解请求与响应对象、URL 参数处理、自定义路由、JSON 接口、静态文件服务、中间件编写及 HTTPS 配置等内容。通过示例代码展示如何使用 `http.HandleFunc`、`http.ServeMux`、`http.Client` 等工具实现常见功能,帮助开发者掌握构建高效 Web 应用的核心技能。
565 61
|
索引 容器
120. [HarmonyOS NEXT 实战案例:教育应用] 基础篇 - 垂直分割布局打造课程学习平台
在本案例中,我们将使用以下HarmonyOS NEXT组件: | 组件名称 | 功能描述 | | ------------- | -------------------------------------- | | `ColumnSplit` | 垂直分割布局容器,将界面分为上下两部分 | | `Column` | 垂直布局容器,用于垂直排列子组件 | | `Row` | 水平布局容器,用于水平排列子组件 | | `Scroll` | 滚动容器,用于在有限空间内展
203 3
120. [HarmonyOS NEXT 实战案例:教育应用] 基础篇 - 垂直分割布局打造课程学习平台
|
UED 容器
122.[HarmonyOS NEXT 实战案例:教育应用] 高级篇 - 课程学习平台的高级布局与自适应设计
在前两篇教程中,我们学习了如何使用HarmonyOS NEXT的`ColumnSplit`组件构建课程学习平台的基本布局,以及如何添加交互功能和状态管理。本篇教程将进一步深入,讲解课程学习平台的高级布局技巧和自适应设计,使应用能够在不同尺寸的设备上提供一致且优质的用户体验。
273 1
122.[HarmonyOS NEXT 实战案例:教育应用] 高级篇 - 课程学习平台的高级布局与自适应设计
|
10月前
|
Windows
电脑显示有问题,电脑连接不上网络,电脑没声音,电脑链接不上打印机?驱动人生就能解决所有问题
电脑显示有问题,电脑连接不上网络,电脑没声音,电脑链接不上打印机?驱动人生就能解决所有问题
204 0
|
网络协议 安全 Devops
Infoblox DDI (NIOS) 9.0 - DNS、DHCP 和 IPAM (DDI) 核心网络服务管理
Infoblox DDI (NIOS) 9.0 - DNS、DHCP 和 IPAM (DDI) 核心网络服务管理
603 4
|
Ubuntu 网络协议 Unix
02理解网络IO:实现服务与客户端通信
网络IO指客户端与服务端通过网络进行数据收发的过程,常见于微信、QQ等应用。本文详解如何用C语言实现一个支持多客户端连接的TCP服务端,涉及socket编程、线程处理及通信流程,并分析“一消息一线程”模式的优缺点。
608 0
|
JSON 缓存 程序员
玩转HarmonyOS NEXT网络请求:从新手到高手的实战秘籍
本文以通俗易懂的方式讲解了HarmonyOS网络请求的核心知识,从基础概念到实战技巧,再到进阶优化,帮助开发者快速上手。通过“点外卖”的类比,形象解释了HTTP请求方法(如GET、POST)和JSON数据格式的作用。同时,提供了封装工具类的示例代码,简化重复操作,并分享了常见问题的解决方法(如权限配置、参数格式、内存泄漏等)。最后,还探讨了如何通过拦截器、缓存机制和重试机制提升请求功能。无论你是新手还是进阶开发者,都能从中受益,快动手实现一个新闻App试试吧!
677 5
|
机器学习/深度学习 人工智能 安全
从攻防演练到AI防护:网络安全服务厂商F5的全方位安全策略
从攻防演练到AI防护:网络安全服务厂商F5的全方位安全策略
367 8

热门文章

最新文章