鸿蒙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

相关文章

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

基于Java开发一个极简版敏感词检测工具

《基于Java开发一个极简版敏感词检测工具》这篇文章主要为大家详细介绍了如何基于Java开发一个极简版敏感词检测工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录你是否还在为敏感词检测头疼一、极简版Java敏感词检测工具的3大核心优势1.1 优势1:DFA算法驱动,效率提升10

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N