鸿蒙HarmonyOS应用开发之NetConnection开发指导

2024-03-29 05:44

本文主要是介绍鸿蒙HarmonyOS应用开发之NetConnection开发指导,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

场景介绍

NetConnection模块提供了常用网络信息查询的能力。

接口说明

NetConnection常用接口如下表所示,

接口名描述
OH_NetConn_HasDefaultNet(int32_t *hasDefaultNet)检查默认数据网络是否被激活,判断设备是否有网络连接,以便在应用程序中采取相应的措施。
OH_NetConn_GetDefaultNet(NetConn_NetHandle *netHandle)获得默认激活的数据网络。
OH_NetConn_IsDefaultNetMetered(int32_t *isMetered)检查当前网络上的数据流量使用是否被计量
OH_NetConn_GetConnectionProperties(NetConn_NetHandle *netHandle, NetConn_ConnectionProperties *prop)获取netHandle对应的网络的连接信息。
OH_NetConn_GetNetCapabilities (NetConn_NetHandle *netHandle, NetConn_NetCapabilities *netCapacities)获取netHandle对应的网络的能力信息。
OH_NetConn_GetDefaultHttpProxy (NetConn_HttpProxy *httpProxy)获取网络默认的代理配置信息。 如果设置了全局代理,则会返回全局代理配置信息。如果进程已经绑定到指定netHandle对应的网络,则返回网络句柄对应网络的代理配置信息。在其它情况下,将返回默认网络的代理配置信息。
OH_NetConn_GetAddrInfo (char *host, char *serv, struct addrinfo *hint, struct addrinfo **res, int32_t netId)通过netId获取DNS结果。
OH_NetConn_FreeDnsResult(struct addrinfo *res)释放DNS结果内存。
OH_NetConn_GetAllNets(NetConn_NetHandleList *netHandleList)获取所有处于连接状态的网络列表。
OHOS_NetConn_RegisterDnsResolver(OH_NetConn_CustomDnsResolver resolver)注册自定义dns解析器。
OHOS_NetConn_UnregisterDnsResolver(void)去注册自定义dns解析器。

网络管理接口开发示例

开发步骤

使用本文档涉及接口获取网络相关信息时,需先创建Native C++工程,在源文件中将相关接口封装,再在ArkTs层对封装的接口进行调用,使用hilog或者console.log等手段选择打印在控制台或者生成设备日志。

本文以实现获取默认激活的数据网络为例,给出具体的开发指导。

添加开发依赖

添加动态链接库

CMakeLists.txt中添加以下lib:

libace_napi.z.so
libnet_connection.so

头文件

#include "napi/native_api.h"
#include "network/netmanager/net_connection.h"
#include "network/netmanager/net_connection_type.h"

构建工程

1、在源文件中编写调用该API的代码,并将结果封装成一个napi_value类型的值返回给 Node.js 环境。

// Get the execution results of the default network connection.
static napi_value GetDefaultNet(napi_env env, napi_callback_info info)
{size_t argc = 1;napi_value args[1] = {nullptr};napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);int32_t param;napi_get_value_int32(env, args[0], &param);NetConn_NetHandle netHandle;if (param== 0) {param= OH_NetConn_GetDefaultNet(NULL);} else {param= OH_NetConn_GetDefaultNet(&netHandle);}napi_value result;napi_create_int32(env, param, &result);return result;
}// Get the ID of the default network connection.
static napi_value NetId(napi_env env, napi_callback_info info) {int32_t defaultNetId;NetConn_NetHandle netHandle;OH_NetConn_GetDefaultNet(&netHandle);defaultNetId = netHandle.netId; // Get the default netIdnapi_value result;napi_create_int32(env, defaultNetId, &result);return result;
}

简要说明:这两个函数是用于获取系统默认网络连接的相关信息的。其中,GetDefaultNet是接收ArkTs端传入的测试参数,返回调用接口后对应的返回值,param可以自行调整;如果返回值为0,代表获取成功,401代表参数错误,201代表没有权限;而NetId函数则用于获取默认网络连接的ID。这些信息可以用于进一步的网络操作。

2、将通过napi封装好的napi_value类型对象初始化导出,通过外部函数接口,将以上两个函数暴露给JavaScript使用。

EXTERN_C_START
static napi_value Init(napi_env env, napi_value exports)
{// Information used to describe an exported attribute. Two properties are defined here: `GetDefaultNet` and `NetId`.napi_property_descriptor desc[] = {{"GetDefaultNet", nullptr, GetDefaultNet, nullptr, nullptr, nullptr, napi_default, nullptr},{"NetId", nullptr, NetId, nullptr, nullptr, nullptr, napi_default, nullptr}};napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);return exports;
}
EXTERN_C_END

3、将上一步中初始化成功的对象通过RegisterEntryModule函数,使用napi_module_register函数将模块注册到 Node.js 中。

static napi_module demoModule = {.nm_version = 1,.nm_flags = 0,.nm_filename = nullptr,.nm_register_func = Init,.nm_modname = "entry",.nm_priv = ((void*)0),.reserved = { 0 },
};extern "C" __attribute__((constructor)) void RegisterEntryModule(void)
{napi_module_register(&demoModule);
}

4、在工程的index.d.ts文件中定义两个函数的类型。

  • GetDefaultNet 函数接受一个数字参数 code,返回一个数字类型的值。
  • NetId 函数不接受参数,返回一个数字类型的值。
export const GetDefaultNet: (code: number) => number;
export const NetId: () => number;

5、在index.ets文件中对上述封装好的接口进行调用

import testNetManager from 'libentry.so';@Entry
@Component
struct Index {@State message: string = '';build() {Row() {Column() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)Button('GetDefaultNet').onClick(event => {this.GetDefaultNet();})Button('CodeNumber').onClick(event =>{this.CodeNumber();})}.width('100%')}.height('100%')}GetDefaultNet() {let netid = testNetManager.NetId();console.log("The defaultNetId is [" + netid + "]");}CodeNumber() {let testParam = 0;let codeNumber = testNetManager.GetDefaultNet(testParam);if (codeNumber === 0) {console.log("Test success. [" + codeNumber + "]");} else if (codeNumber === 201) {console.log("Missing permissions. [" + codeNumber + "]");} else if (codeNumber === 401) {console.log("Parameter error. [" + codeNumber + "]");}}
}

6、配置CMakeLists.txt,本模块需要用到的共享库是libnet_connection.so,在工程自动生成的CMakeLists.txt中的target_link_libraries中添加此共享库。

注意:如图所示,在add_library中的entry是工程自动生成的modename,若要做修改,需和步骤3中.nm_modname保持一致;

经过以上步骤,整个工程的搭建已经完成,接下来就可以连接设备运行工程进行日志查看了。

测试步骤

1、连接设备,使用DevEco Studio打开搭建好的工程

2、运行工程,设备上会弹出以下所示图片:

简要说明:

  • 在点击 GetDefaultNet 时,获取的是默认网络ID。
  • 在点击 codeNumber 时,获取的是接口返回的响应状态码。

3、点击 GetDefaultNet 按钮,控制台会打印日志:

4、点击 codeNumber 按钮,控制台会打印相应的响应状态码:

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

这篇关于鸿蒙HarmonyOS应用开发之NetConnection开发指导的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/857759

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

zoj3820(树的直径的应用)

题意:在一颗树上找两个点,使得所有点到选择与其更近的一个点的距离的最大值最小。 思路:如果是选择一个点的话,那么点就是直径的中点。现在考虑两个点的情况,先求树的直径,再把直径最中间的边去掉,再求剩下的两个子树中直径的中点。 代码如下: #include <stdio.h>#include <string.h>#include <algorithm>#include <map>#