网络管理开发概述
HarmonyOS网络管理模块主要提供以下功能:
数据连接管理:网卡绑定,打开URL,数据链路参数查询。
数据网络管理:指定数据网络传输,获取数据网络状态变更,数据网络状态查询。
流量统计:获取蜂窝网络、所有网卡、指定应用或指定网卡的数据流量统计值。
HTTP缓存:有效管理HTTP缓存,减少数据流量。
创建本地套接字:实现本机不同进程间的通信,目前只支持流式套接字。
约束与限制
使用网络管理模块的相关功能时,需要请求相应的权限。
使用当前网络打开一个URL链接
场景介绍
应用使用当前的数据网络打开一个URL链接。
接口说明
应用使用当前网络打开一个URL链接,所使用的接口说明如下。
表1 网络管理功能的主要接口
开发步骤
调用NetManager.getInstance(Context)获取网络管理的实例对象。
调用NetManager.getDefaultNet()获取默认的数据网络。
调用NetHandle.openConnection()打开一个URL。
通过URL链接实例访问网站。
NetManager netManager = NetManager.getInstance(context); if (!netManager.hasDefaultNet()) { return; } NetHandle netHandle = netManager.getDefaultNet(); // 可以获取网络状态的变化 NetStatusCallback callback = new NetStatusCallback() { // 重写需要获取的网络状态变化的override函数 }; netManager.addDefaultNetStatusCallback(callback); // 通过openConnection来获取URLConnection HttpURLConnection connection = null; try { String urlString = "EXAMPLE_URL"; // 开发者根据实际情况自定义EXAMPLE_URL URL url = new URL(urlString); URLConnection urlConnection = netHandle.openConnection(url, java.net.Proxy.NO_PROXY); if (urlConnection instanceof HttpURLConnection) { connection = (HttpURLConnection) urlConnection; connection.setRequestMethod("GET"); connection.connect(); // 之后可进行url的其他操作 } } catch(IOException e) { HiLog.error(TAG, "exception happened."); } finally { if (connection != null){ connection.disconnect(); } }
使用当前网络进行Socket数据传输
场景介绍
应用使用当前的数据网络进行Socket数据传输。
接口说明
应用使用当前网络进行Socket数据传输,所使用的接口说明如下。
表1 网络管理功能的主要接口
开发步骤
- 1.调用NetManager.getInstance(Context)获取网络管理的实例对象。
- 2.调用NetManager.getDefaultNet()获取默认的数据网络。
- 3.调用NetHandle.bindSocket()绑定网络。
- 4.使用socket发送数据。
NetManager netManager = NetManager.getInstance(context); if (!netManager.hasDefaultNet()) { return; } NetHandle netHandle = netManager.getDefaultNet(); // 通过Socket绑定来进行数据传输 DatagramSocket socket = null; try { InetAddress address = netHandle.getByName("www.EXAMPLE.com"); // 开发者根据实际情况自定义EXAMPLE_URL socket = new DatagramSocket(); netHandle.bindSocket(socket); byte[] buffer = new byte[1024]; DatagramPacket request = new DatagramPacket(buffer, buffer.length, address, port); // port为连接UDP Socket时自行指定的端口 // buffer赋值 // 发送数据 socket.send(request); } catch(IOException e) { HiLog.error(TAG, "exception happened."); }finally { if (socket != null) { socket.close(); } }
使用指定网络进行数据访问
场景介绍
应用可以调用API接口来使用指定网络进行数据传输。在进行数据传输前,需要先建立自定义的网络类型。
接口说明
应用使用指定网络进行数据访问,所使用的接口说明如下。
表1 网络管理功能的主要接口
开发步骤
- 1.调用NetSpecifier.Builder()构建指定数据网络的实例。
- 2.调用NetManager.setupSpecificNet()建立数据网络,通过callback获取网络状态变化。
- 3.进行数据发送。
NetManager netManager = NetManager.getInstance(context); private class MmsCallback extends NetStatusCallback { @Override public void onAvailable(NetHandle netHandle) { // 通过setAppNet把后续应用所有的请求都通过该网络进行发送 netManager.setAppNet(netHandle); HttpURLConnection connection = null; try { String urlString = "EXAMPLE_URL"; // 开发者根据实际情况自定义EXAMPLE_URL URL url = new URL(urlString); URLConnection urlConnection = netHandle.openConnection(url, java.net.Proxy.NO_PROXY); if (urlConnection instanceof HttpURLConnection) { connection = (HttpURLConnection) urlConnection; } connection.setRequestMethod("GET"); connection.connect(); // 之后可进行url的其他操作 } finally { if(connection != null){ connection.disconnect(); } } // 如果业务执行完毕,可以停止获取 netManager.removeNetStatusCallback(this); } } MmsCallback callback = new MmsCallback(); // 配置一个彩信类型的蜂窝网络 NetSpecifier req = new NetSpecifier.Builder() .addCapability(NetCapabilities.NET_CAPABILITY_MMS) .addBearer(NetCapabilities.BEARER_CELLULAR) .build(); // 建立数据网络,通过callback获取网络变更状态 netManager.setupSpecificNet(req, callback);
流量统计
场景介绍
应用通过调用API接口,可以获取蜂窝网络、所有网卡、指定应用或指定网卡的数据流量统计值。
接口说明
应用进行流量统计,所使用的接口主要由DataFlowStatistics提供。
表1 DataFlowStatistics的主要接口
开发步骤
调用DataFlowStatistics的接口可进行流量统计,以统计指定应用进程的流量为例。
long rx = DataFlowStatistics.getUidRxBytes(uid); long tx = DataFlowStatistics.getUidTxBytes(uid); // 进行数据收发 // 统计流量 rx = DataFlowStatistics.getUidRxBytes(uid) - rx; tx = DataFlowStatistics.getUidTxBytes(uid) - tx;
管理HTTP缓存
场景介绍
应用重复打开一个相同网页时,可以优先从缓存文件里读取内容,从而减少数据流量,降低设备功耗,提升应用性能。
接口说明
管理HTTP缓存的功能主要由HttpResponseCache类提供。
表1 HttpResponseCache的主要接口
开发步骤
- 1.配置缓存目录及最大缓存空间。
- 2.保存缓存。
- 3.关闭缓存。
// 初始化时设置缓存目录dir及最大缓存空间 HttpResponseCache.install(dir, 10 * 1024 * 1024); // 访问URL // 为确保缓存保存到文件系统可以执行flush操作 HttpResponseCache.getInstalled().flush(); // 结束时关闭缓存 HttpResponseCache.getInstalled().close();