HarmonyOS Sample 之 NetworkManagement 网络管理功能 原创 精华
目录
HarmonyOS Sample 之 NetworkManagement 网络管理功能
1.介绍
本示例演示了如何使用网络管理模块相关接口,演示了以下功能:
功能1:使用默认网络,打开连接,发送HTTP请求。
功能2:统计指定UID的上行/下行流量。
功能3:使用Socket方式实现不同设备间通信。
此功能需要打开WIFI,并且通信的设备连接相同的WIFI 组成局域网。
操作上,先启动服务端,再启动客户端,然后从客户端发送消息,查看服务端是否收到消息。
功能4:HTTP缓存的使用,创建缓存,供下一次请求使用,减少数据流量和加载时间。
注意,需要以下权限:
ohos.permission.GET_NETWORK_INFO 获取网络连接信息。
ohos.permission.SET_NETWORK_INFO 修改网络连接状态。
ohos.permission.INTERNET 允许程序打开网络套接字,进行网络连接。
详情见官方文档 网络管理开发概述
2.搭建环境
安装DevEco Studio,详情请参考DevEco Studio下载。
设置DevEco Studio开发环境,DevEco Studio开发环境需要依赖于网络环境,需要连接上网络才能确保工具的正常使用,可以根据如下两种情况来配置开发环境:
如果可以直接访问Internet,只需进行下载HarmonyOS SDK操作。
如果网络不能直接访问Internet,需要通过代理服务器才可以访问,请参考配置开发环境。
下载源码后,使用DevEco Studio 打开项目,模拟器运行即可。
真机运行需要将config.json中的bundleName修改为自己的,如果没有请到AGC上进行配置,参见 使用模拟器进行调试
3.代码结构
3.1 代码结构
3.2 相关文件介绍
核心类:
HttpURLConnection.java //支持 HTTP 特定功能的 URLConnection
URLConnection.java //URL连接
URL.java //指向万维网上“资源”的指针
NetStatusCallback.java //网络状态的回调类,出现可用网络触发onAvailable函数
DataFlowStatistics.java //该类提供查询指定蜂窝网络、应用和网卡的整体流量统计和流量统计的接口。
DatagramSocket.java //此类表示用于发送和接收数据报包的套接字。
DatagramPacket.java //数据报包
WifiDevice.java //该类提供Wi-Fi管理接口
NetManager.java //提供接口来管理和使用数据网络。
NetHandle.java // 数据网络
InetAddress.java //网络IP地址
HttpResponseCache.java //该类缓存 HTTP 和 HTTPS 响应以供重用
自定义的类:
ThreadPoolUtil.java //线程池工具类
MainAbilitySlice.java //主页面
NetRequestSlice.java //网络请求&流量统计 功能页
SocketClientSlice.java //Socket客户端
SocketServerSlice.java //Socket服务端
HttpCacheSlice.java //HTTP缓存功能页
页面布局:
http_cache_slice.xml //HTTP缓存示例页
net_request.slice.xml //HTTP请求页面
socket_client_slice.xml //Socket通信客户端页
socket_server_slice.xml //Socket通信服务端页
main_ability_slice.xml //主页面
4.实例讲解
4.1.界面布局
主页面 | HTTP请求页面 | 缓存示例页 |
---|---|---|
![]() |
![]() |
![]() |
4.2.后台代码
4.2.1 NetRequestSlice.java 网络请求&流量统计 功能
a.初始化网络管理对象NetManager
b.通过线程池获取一个新线程处理进行连接请求
获取默认数据网络的时候需要ohos.permission.GET_NETWORK_INFO权限。
c.按照应用ID,进行数据流量统计
在发送请求前获取一次,在请求完成后获取一次,
gitee代码中这个地方有一处笔误,tx代表上行流量,rx代表下行流量才对。详情见官方文档说明 流量统计
4.2.2 SocketClientSlice.java/SocketServerSlice.java Socket客户端/服务端
实现Socket通信,是要客户端和服务端的,服务端在指定网卡上监听指定端口,客户端向指定IP指定端口发送数据,实现通信。
a.Socket服务端开启监听,等待接收数据
b.Socket客户端发送数据,等待接收数据
初始化NetManager对象->new 一个DatagramSocket->获取当前数据网络NetHandle->获取服务端的IP地址对象InetAddress
->将DatagramSocket绑定到NetHandle -> new 一个数据报包DatagramPacket -> 发送数据
4.2.3 HttpCacheSlice.java HTTP缓存功能
应用重复打开一个相同网页时,可以优先从缓存文件里读取内容,从而减少数据流量,降低设备功耗,提升应用性能。
问:如何设置优先从缓存文件里读取内容,
答:不用额外设置,自动的 ~~
设置缓存,需要考虑 缓存位置和缓存大小。
a.初始化缓存 install
b.保存缓存,将缓存写入文件系统 flush
c.禁用缓存并删除其中的数据delete
5.总结说明
1.两种打开网络连接的方式
2.未开启缓存情况下,发送请求的时长在400-2000ms之间,开启后,需要点击两次发送请求,时长维持在90-200ms左右。
3.禁用并清除缓存delete/close后,在没有再次开启缓存前,无法发送请求。这个操作官方文档注释写的是 “结束时关闭缓存”。
6.完整代码
附件直接下载
各种讲解和演示楼主都展示的很详细呀,赞一个。
好文学习了
感谢支持!
感谢支持!
不好意思,我发现一个单词拼错了,buddleName 这个
各种讲解和演示楼主都展示的很详细呀,赞一个。比官网文档更适合作为官网文档,楼主666
哈哈,感谢,已更正。
感谢支持