• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

HarmonyOS学习路:开发篇—网络和连接网络管理

武飞扬头像
爱吃土豆丝的打工人
帮助1

网络管理开发概述

HarmonyOS网络管理模块主要提供以下功能:

  • 数据连接管理:网卡绑定,打开URL,数据链路参数查询。
  • 数据网络管理:指定数据网络传输,获取数据网络状态变更,数据网络状态查询。
  • 流量统计:获取蜂窝网络、所有网卡、指定应用或指定网卡的数据流量统计值。
  • HTTP缓存:有效管理HTTP缓存,减少数据流量。
  • 创建本地套接字:实现本机不同进程间的通信,目前只支持流式套接字。

约束与限制

使用网络管理模块的相关功能时,需要请求相应的权限。

权限名

权限描述

ohos.permission.GET_NETWORK_INFO

获取网络连接信息。

ohos.permission.SET_NETWORK_INFO

修改网络连接状态。

ohos.permission.INTERNET

允许程序打开网络套接字,进行网络连接。

使用当前网络打开一个URL链接

场景介绍

应用使用当前的数据网络打开一个URL链接。

接口说明

应用使用当前网络打开一个URL链接,所使用的接口说明如下。

表1 网络管理功能的主要接口

类名

接口名

功能描述

NetManager

getInstance(Context context)

获取网络管理的实例对象。

hasDefaultNet()

查询当前是否有默认可用的数据网络。

getDefaultNet()

获取当前默认的数据网络句柄。

addDefaultNetStatusCallback(NetStatusCallback callback)

获取当前默认的数据网络状态变化。

setAppNet(NetHandle netHandle)

应用绑定该数据网络。

NetHandle

openConnection(URL url, java.net.Proxy proxy) throws IOException

使用该网络打开一个URL链接。

开发步骤

  1. 调用NetManager.getInstance(Context)获取网络管理的实例对象。
  2. 调用NetManager.getDefaultNet()获取默认的数据网络。
  3. 调用NetHandle.openConnection()打开一个URL。
  4. 通过URL链接实例访问网站。
  1.  
    NetManager netManager = NetManager.getInstance(context);
  2.  
     
  3.  
    if (!netManager.hasDefaultNet()) {
  4.  
    return;
  5.  
    }
  6.  
    NetHandle netHandle = netManager.getDefaultNet();
  7.  
     
  8.  
    // 可以获取网络状态的变化
  9.  
    NetStatusCallback callback = new NetStatusCallback() {
  10.  
    // 重写需要获取的网络状态变化的override函数
  11.  
    };
  12.  
    netManager.addDefaultNetStatusCallback(callback);
  13.  
     
  14.  
    // 通过openConnection来获取URLConnection
  15.  
    HttpURLConnection connection = null;
  16.  
    try {
  17.  
    String urlString = "EXAMPLE_URL"; // 开发者根据实际情况自定义EXAMPLE_URL
  18.  
    URL url = new URL(urlString);
  19.  
     
  20.  
    URLConnection urlConnection = netHandle.openConnection(url,
  21.  
    java.net.Proxy.NO_PROXY);
  22.  
    if (urlConnection instanceof HttpURLConnection) {
  23.  
    connection = (HttpURLConnection) urlConnection;
  24.  
    connection.setRequestMethod("GET");
  25.  
    connection.connect();
  26.  
    // 之后可进行url的其他操作
  27.  
    }
  28.  
    } catch(IOException e) {
  29.  
    HiLog.error(TAG, "exception happened.");
  30.  
    } finally {
  31.  
    if (connection != null){
  32.  
    connection.disconnect();
  33.  
    }
  34.  
    }
学新通

使用当前网络进行Socket数据传输

场景介绍

应用使用当前的数据网络进行Socket数据传输。

接口说明

应用使用当前网络进行Socket数据传输,所使用的接口说明如下。

表1 网络管理功能的主要接口

类名

接口名

功能描述

NetHandle

getByName(String host)

解析主机名,获取其IP地址。

bindSocket(Socket socket)

绑定Socket到该数据网络。

bindSocket(DatagramSocket socket)

绑定DatagramSocket到该数据网络。

开发步骤

  1. 调用NetManager.getInstance(Context)获取网络管理的实例对象。
  2. 调用NetManager.getDefaultNet()获取默认的数据网络。
  3. 调用NetHandle.bindSocket()绑定网络。
  4. 使用socket发送数据。
  1.  
    NetManager netManager = NetManager.getInstance(context);
  2.  
     
  3.  
    if (!netManager.hasDefaultNet()) {
  4.  
    return;
  5.  
    }
  6.  
    NetHandle netHandle = netManager.getDefaultNet();
  7.  
     
  8.  
    // 通过Socket绑定来进行数据传输
  9.  
    DatagramSocket socket = null;
  10.  
    try {
  11.  
    InetAddress address = netHandle.getByName("www.EXAMPLE.com"); // 开发者根据实际情况自定义EXAMPLE_URL
  12.  
    socket = new DatagramSocket();
  13.  
    netHandle.bindSocket(socket);
  14.  
    byte[] buffer = new byte[1024];
  15.  
    DatagramPacket request = new DatagramPacket(buffer, buffer.length, address, port); // port为连接UDP Socket时自行指定的端口
  16.  
    // buffer赋值
  17.  
     
  18.  
    // 发送数据
  19.  
    socket.send(request);
  20.  
    } catch(IOException e) {
  21.  
    HiLog.error(TAG, "exception happened.");
  22.  
    }finally {
  23.  
    if (socket != null) {
  24.  
    socket.close();
  25.  
    }
  26.  
    }
学新通

使用指定网络进行数据访问

场景介绍

应用可以调用API接口来使用指定网络进行数据传输。在进行数据传输前,需要先建立自定义的网络类型。

接口说明

应用使用指定网络进行数据访问,所使用的接口说明如下。

表1 网络管理功能的主要接口

类名

接口名

功能描述

NetSpecifier

Builder()

创建一个指定网络实例。

NetManager

setupSpecificNet(NetSpecifier netSpecifier, NetStatusCallback callback)

建立指定的数据网络。

removeNetStatusCallback(NetStatusCallback callback)

停止获取数据网络状态。

开发步骤

  1. 调用NetSpecifier.Builder()构建指定数据网络的实例。
  2. 调用NetManager.setupSpecificNet()建立数据网络,通过callback获取网络状态变化。
  3. 进行数据发送。
  1.  
    NetManager netManager = NetManager.getInstance(context);
  2.  
     
  3.  
    private class MmsCallback extends NetStatusCallback {
  4.  
    @Override
  5.  
    public void onAvailable(NetHandle netHandle) {
  6.  
    // 通过setAppNet把后续应用所有的请求都通过该网络进行发送
  7.  
    netManager.setAppNet(netHandle);
  8.  
    HttpURLConnection connection = null;
  9.  
    try {
  10.  
    String urlString = "EXAMPLE_URL"; // 开发者根据实际情况自定义EXAMPLE_URL
  11.  
    URL url = new URL(urlString);
  12.  
    URLConnection urlConnection = netHandle.openConnection(url, java.net.Proxy.NO_PROXY);
  13.  
    if (urlConnection instanceof HttpURLConnection) {
  14.  
    connection = (HttpURLConnection) urlConnection;
  15.  
    }
  16.  
    connection.setRequestMethod("GET");
  17.  
    connection.connect();
  18.  
    // 之后可进行url的其他操作
  19.  
    } finally {
  20.  
    if(connection != null){
  21.  
    connection.disconnect();
  22.  
    }
  23.  
    }
  24.  
     
  25.  
    // 如果业务执行完毕,可以停止获取
  26.  
    netManager.removeNetStatusCallback(this);
  27.  
    }
  28.  
    }
  29.  
     
  30.  
    MmsCallback callback = new MmsCallback();
  31.  
     
  32.  
    // 配置一个彩信类型的蜂窝网络
  33.  
    NetSpecifier req = new NetSpecifier.Builder()
  34.  
    .addCapability(NetCapabilities.NET_CAPABILITY_MMS)
  35.  
    .addBearer(NetCapabilities.BEARER_CELLULAR)
  36.  
    .build();
  37.  
     
  38.  
    // 建立数据网络,通过callback获取网络变更状态
  39.  
    netManager.setupSpecificNet(req, callback);
学新通

流量统计

场景介绍

应用通过调用API接口,可以获取蜂窝网络、所有网卡、指定应用或指定网卡的数据流量统计值。

接口说明

应用进行流量统计,所使用的接口主要由DataFlowStatistics提供。

表1 DataFlowStatistics的主要接口

接口名

功能描述

getCellularRxBytes()

获取蜂窝数据网络的下行流量。

getCellularTxBytes()

获取蜂窝数据网络的上行流量。

getAllRxBytes()

获取所有网卡的下行流量。

getAllTxBytes()

获取所有网卡的上行流量。

getUidRxBytes(int uid)

获取指定UID的下行流量。

getUidTxBytes(int uid)

获取指定UID的上行流量。

getIfaceRxBytes(String nic)

获取指定网卡的下行流量。

getIfaceTxBytes(String nic)

获取指定网卡的上行流量。

开发步骤

调用DataFlowStatistics的接口可进行流量统计,以统计指定应用进程的流量为例。

  1.  
    long rx = DataFlowStatistics.getUidRxBytes(uid);
  2.  
    long tx = DataFlowStatistics.getUidTxBytes(uid);
  3.  
     
  4.  
    // 进行数据收发
  5.  
     
  6.  
    // 统计流量
  7.  
    rx = DataFlowStatistics.getUidRxBytes(uid) - rx;
  8.  
    tx = DataFlowStatistics.getUidTxBytes(uid) - tx;

管理HTTP缓存

场景介绍

应用重复打开一个相同网页时,可以优先从缓存文件里读取内容,从而减少数据流量,降低设备功耗,提升应用性能。

接口说明

管理HTTP缓存的功能主要由HttpResponseCache类提供。

表1 HttpResponseCache的主要接口

接口名

功能描述

install(File directory, long size)

使能HTTP缓存,设置缓存保存目录及大小。

getInstalled()

获取缓存实例。

flush()

立即保存缓存信息到文件系统中。

close()

关闭缓存功能。

delete()

关闭并清除缓存内容。

开发步骤

  1. 配置缓存目录及最大缓存空间。
  2. 保存缓存。
  3. 关闭缓存。
  1.  
    // 初始化时设置缓存目录dir及最大缓存空间
  2.  
    HttpResponseCache.install(dir, 10 * 1024 * 1024);
  3.  
     
  4.  
    // 访问URL
  5.  
     
  6.  
    // 为确保缓存保存到文件系统可以执行flush操作
  7.  
    HttpResponseCache.getInstalled().flush();
  8.  
     
  9.  
    // 结束时关闭缓存
  10.  
    HttpResponseCache.getInstalled().close();

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfgifie
系列文章
更多 icon
同类精品
更多 icon
继续加载