目录
一、HarmonyOS 网络连接管理简介
二、HarmonyOS 网络连接 API 接口说明
(一)获取网络相关信息接口
(二)网络状态订阅接口
(三)网络操作接口
三、HarmonyOS 网络连接 API 实例代码展示
(一)接收指定网络状态变化通知实例
(二)使用对应网络解析域名实例
四、实际应用场景与注意事项
(一)实际应用场景举例
(二)开发中的注意事项
五、总结与展望
一、HarmonyOS 网络连接管理简介

在 HarmonyOS 中,网络连接管理是系统的重要组成部分,它为设备提供了一系列强大的网络管理能力。这些能力使得设备在复杂的网络环境中,依然能够保持高效、稳定的网络连接,为用户带来流畅的网络体验。
多网络连接优先级管理是 HarmonyOS 网络连接管理的一大特色。在实际使用中,我们的设备可能同时连接到多个网络,比如 WiFi、蜂窝网络、以太网等 。HarmonyOS 能够根据用户的设置以及网络的实际状况,自动管理这些网络连接的优先级。例如,当设备同时连接了 WiFi 和蜂窝网络时,如果用户将 WiFi 设置为高优先级,并且 WiFi 信号稳定,那么系统会优先使用 WiFi 进行数据传输。这样不仅可以保证数据传输的速度和稳定性,还能为用户节省移动数据流量。
网络质量评估功能则是 HarmonyOS 网络连接管理的另一大亮点。通过实时监测网络的各项指标,如网络延迟、带宽、丢包率等,系统能够准确地评估当前网络的质量。这些评估结果对于应用程序来说非常重要,它们可以根据网络质量的好坏,动态调整数据传输策略。比如在网络质量较好时,视频应用可以提供高清甚至 4K 的视频播放;而在网络质量较差时,则自动降低视频分辨率,以保证播放的流畅性,避免出现卡顿现象。
此外,HarmonyOS 的网络连接管理还支持订阅默认 / 指定网络连接状态变化、查询网络连接信息、DNS 解析等功能。这些功能相互协作,共同为设备的网络连接提供了全方位的管理和保障。
那么,开发者如何在应用中使用这些强大的网络连接管理功能呢?这就需要用到 HarmonyOS 提供的网络连接 API 了。接下来,我们就深入探讨一下这些 API 的详细说明以及如何使用它们来实现各种网络相关的功能。
二、HarmonyOS 网络连接 API 接口说明
(一)获取网络相关信息接口
获取默认网络接口:getDefaultNet(callback: AsyncCallback<NetHandle>): void或getDefaultNetSync(): NetHandle。getDefaultNet方法通过回调函数callback异步获取一个含有默认网络的netId的NetHandle对象,而getDefaultNetSync则是同步获取默认激活的数据网络的NetHandle对象。例如在一个需要实时感知默认网络变化的应用场景中,就可以使用异步回调方式,在网络变化时及时做出响应;而在一些简单查询场景,如启动时获取默认网络信息用于初始化设置,则可使用同步方法。
获取 App 绑定网络接口:getAppNet(callback: AsyncCallback<NetHandle>): void 。该接口通过callback回调来获取一个 App 绑定的包含了网络netId的NetHandle对象。假如有一个多网络切换需求的应用,在不同网络环境下进行不同业务处理,就需要知道当前 App 绑定在哪个网络上,此时这个接口就能派上用场。
获取所有连接状态网络接口:getAllNets(callback: AsyncCallback<Array<NetHandle>>): void 。通过callback回调获取所有处于连接状态的网络的NetHandle对象列表。像一些网络管理类应用,需要展示当前设备所有已连接网络,就会用到这个接口,方便用户对各个网络进行管理和查看。
(二)网络状态订阅接口
订阅网络可用事件接口:on(type: 'netAvailable', callback: Callback<NetHandle>): void 。当网络变为可用状态时,会触发callback回调,开发者可以在回调函数中编写处理逻辑,比如开始数据传输、更新界面提示用户网络已可用等。比如在一个视频播放应用中,网络不可用时暂停播放,当通过此接口监听到网络可用时,就可以自动恢复视频播放。
订阅网络能力变化事件接口:on(type: 'netCapabilitiesChange', callback: Callback<{ netHandle: NetHandle, netCap: NetCapabilities }>): void 。当网络的能力发生变化,如带宽、连接类型等改变时,会触发这个回调。在在线游戏应用中,网络能力变化可能影响游戏的帧率和流畅度,开发者可以在回调中根据新的网络能力调整游戏的画质、数据传输频率等参数,以保证游戏的稳定运行。
订阅网络连接信息变化事件接口:on(type: 'netConnectionPropertiesChange', callback: Callback<{ netHandle: NetHandle, connectionProperties: ConnectionProperties }>): void 。当网络连接属性,如 IP 地址、DNS 等发生变化时,会触发此回调。对于一些需要固定网络配置的应用,如远程办公应用连接公司内部服务器,网络连接信息变化时就需要及时更新配置,以保证正常通信。
(三)网络操作接口
设置网络代理接口:setAppHttpProxy(httpProxy: HttpProxy): void 。用于设置网络应用级 Http 代理配置信息。在企业内部网络环境中,经常会使用代理服务器来访问外部网络,开发者可以通过这个接口设置应用的代理,使应用能够正常访问外部资源。
绑定 App 到指定网络接口:setAppNet(netHandle: NetHandle, callback: AsyncCallback<void>): void 。将 App 绑定到指定网络,绑定后的 App 只能通过指定网络访问外网。比如在一些需要特定网络环境的测试应用中,就可以将应用绑定到指定的测试网络,避免干扰正常业务网络 。
报告网络状态接口:reportNetConnected(netHandle: NetHandle, callback: AsyncCallback<void>): void和reportNetDisconnected(netHandle: NetHandle, callback: AsyncCallback<void>): void 。当应用程序认为网络的可用性与网络管理不一致时,可以调用这两个接口向网络管理报告网络处于可用或不可用状态。在一些特殊的网络监测应用中,应用自身对网络状态有更精准的判断逻辑,就可以通过这两个接口向系统反馈自己检测到的网络状态。
三、HarmonyOS 网络连接 API 实例代码展示
(一)接收指定网络状态变化通知实例
在 HarmonyOS 应用开发中,接收指定网络状态变化通知能让我们的应用及时响应网络状态改变,优化用户体验。比如在视频播放应用里,当网络从不可用变为可用时,就可以自动恢复播放。下面来看完整代码示例:
// 引入网络连接模块
import connection from '@ohos.net.connection';
// 引入错误处理模块(用于处理可能的错误)
import { BusinessError } from '@ohos.base';
// 权限申请:在config.json文件中添加权限声明
// "requestPermissions": [
// {"name": "ohos.permission.GET_NETWORK_INFO"}
// ]
// 配置网络规格,这里以蜂窝网络为例
let netSpecifier: connection.NetSpecifier = {
netCapabilities: {
// 指定网络类型为蜂窝网络
bearerTypes: [connection.NetBearType.BEARER_CELLULAR],
// 指定网络能力为具备访问Internet能力
networkCap: [connection.NetCap.NET_CAPABILITY_INTERNET]
}
};
// 设置获取网络的超时时间为10秒(可选,默认值为0)
let timeout = 10 * 1000;
// 创建一个NetConnection对象,用于管理网络连接相关操作
let conn = connection.createNetConnection(netSpecifier, timeout);
// 订阅指定网络状态变化的通知
conn.register((err: BusinessError, data: void) => {
if (err) {
console.error('订阅失败:', err);
} else {
console.log('订阅成功');
}
});
// 订阅网络可用事件,当指定网络可用时触发此回调
conn.on('netAvailable', (data: connection.NetHandle) => {
console.log('net is available, netId is'+ data.netId);
});
// 订阅网络不可用事件,当指定网络不可用时触发此回调
conn.on('netUnavailable', () => {
console.log('net is unavailable');
});
// 当不再需要监听网络状态变化时(比如页面销毁时),取消订阅
// 假设在某个生命周期函数中调用此方法,如页面卸载时
conn.unregister((err: BusinessError, data: void) => {
if (err) {
console.error('取消订阅失败:', err);
} else {
console.log('取消订阅成功');
}
});
代码解释:
引入模块:通过import语句引入@ohos.net.connection模块,用于使用网络连接相关 API,同时引入@ohos.base模块下的BusinessError,以便处理可能出现的错误。
权限申请:在应用的config.json文件中添加ohos.permission.GET_NETWORK_INFO权限声明,只有申请了该权限,应用才能获取网络相关信息并进行状态订阅。
配置网络规格:定义netSpecifier对象,配置网络类型为蜂窝网络BEARER_CELLULAR,并指定网络具备访问 Internet 的能力NETWORK_CAPABILITY_INTERNET。
创建 NetConnection 对象:使用connection.createNetConnection方法,传入配置好的netSpecifier和timeout参数,创建一个NetConnection对象,这个对象是后续进行网络状态订阅和操作的关键。
订阅网络状态变化通知:调用conn.register方法,传入回调函数,在回调函数中处理订阅结果,若有错误则打印错误信息,若成功则打印成功日志。
订阅网络可用和不可用事件:分别使用conn.on('netAvailable', callback)和conn.on('netUnavailable', callback)方法,传入对应的回调函数,当网络状态发生变化时,相应的回调函数会被触发,我们可以在回调函数中编写业务逻辑,如更新界面提示用户网络状态。
取消订阅:当不需要再监听网络状态变化时,调用conn.unregister方法,传入回调函数处理取消订阅的结果 ,确保资源的正确释放,避免内存泄漏和不必要的资源占用。
(二)使用对应网络解析域名实例
在网络通信中,域名解析是将域名转换为 IP 地址的关键步骤。HarmonyOS 提供的网络连接 API 可以方便地使用对应网络进行域名解析。下面是使用对应网络解析域名获取 IP 的代码示例:
// 引入网络连接模块
import connection from '@ohos.net.connection';
// 权限申请:在config.json文件中添加权限声明
// "requestPermissions": [
// {"name": "ohos.permission.GET_NETWORK_INFO"}
// ]
// 获取默认网络的NetHandle对象,用于后续操作
connection.getDefaultNet((err, netHandle) => {
if (err) {
console.error('获取默认网络失败:', err);
return;
}
// 定义要解析的域名
let domain = 'www.example.com';
// 使用默认网络解析域名,获取IP地址列表
connection.resolveHost(netHandle, domain, (error, addresses) => {
if (error) {
console.error('域名解析失败:', error);
} else {
console.log('解析得到的IP地址:', addresses);
// 这里可以对解析得到的IP地址进行后续操作,比如建立网络连接等
}
});
});
关键代码逻辑解释:
权限申请:同接收网络状态变化通知一样,需要在config.json文件中添加ohos.permission.GET_NETWORK_INFO权限声明,以获取网络信息并进行域名解析操作。
获取默认网络:通过connection.getDefaultNet方法,传入回调函数,在回调函数中获取默认网络的netHandle对象。如果获取过程中出现错误,打印错误信息并终止后续操作。
定义域名:定义一个字符串变量domain,指定要解析的域名,这里以www.example.com为例,实际应用中可以根据需求动态传入域名。
解析域名:使用connection.resolveHost方法,传入获取到的netHandle对象和要解析的域名domain,以及回调函数。在回调函数中处理解析结果,如果解析失败,打印错误信息;如果解析成功,打印解析得到的 IP 地址列表addresses,并可以根据业务需求对这些 IP 地址进行后续操作,比如选择一个 IP 地址建立网络连接来访问服务器资源。
四、实际应用场景与注意事项
(一)实际应用场景举例
智能家居场景:在智能家居系统中,HarmonyOS 网络连接 API 发挥着关键作用。智能设备如智能灯泡、智能摄像头、智能音箱等需要连接到家庭网络,与控制中心或其他设备进行通信。通过网络连接 API,智能设备可以自动搜索并连接到家庭 WiFi 网络,实现设备的远程控制和数据交互。当用户离家时,可以通过手机应用远程控制智能摄像头查看家中情况,这就依赖于网络连接 API 获取网络状态并建立稳定连接,确保视频数据的实时传输。而且多个智能设备之间也能通过网络连接 API 实现协同工作,如智能音箱检测到用户回家,通过网络通知智能灯光自动亮起,为用户营造舒适的家居环境。
移动应用数据交互场景:以社交类移动应用为例,用户在使用过程中需要不断地与服务器进行数据交互,如发送消息、接收图片、视频等。网络连接 API 能帮助应用实时监测网络状态,在网络可用时及时发送和接收数据,保证社交互动的及时性。当网络状态发生变化时,应用可以根据网络连接 API 的通知,调整数据传输策略。比如从 4G 网络切换到 WiFi 网络时,若 WiFi 网络带宽充足,应用可以提高图片、视频的加载质量,为用户提供更好的体验;若网络从可用变为不可用,应用则可以提示用户网络异常,并缓存未发送成功的数据,待网络恢复后自动重发 。
(二)开发中的注意事项
权限申请:在使用 HarmonyOS 网络连接 API 之前,一定要确保在config.json文件中正确申请相关权限。例如,获取网络信息、进行网络状态订阅等功能,通常需要申请ohos.permission.GET_NETWORK_INFO权限。如果没有申请权限或权限申请错误,应用在运行时调用相关 API 会导致权限不足的错误,无法正常实现网络功能。
异步调用处理:大部分网络连接 API 采用异步调用方式,通过回调函数来返回结果。开发者在处理异步操作时要注意代码的逻辑结构,避免出现回调地狱的问题。可以使用async/await语法糖来简化异步代码的编写,使代码结构更加清晰。比如在进行多个网络操作依次执行时,使用async/await可以让代码看起来像同步执行一样,提高代码的可读性和可维护性。同时,要注意在异步操作中正确处理错误,在回调函数中对错误进行判断和处理,避免因为异步操作失败而导致应用崩溃或出现异常行为。
资源释放:当不再需要监听网络状态变化或使用网络连接相关功能时,要及时释放相关资源。比如取消网络状态订阅,调用unregister方法来停止监听,避免不必要的资源占用和内存泄漏。对于创建的NetConnection等对象,在不再使用时,也要进行相应的释放操作,确保应用的资源使用高效合理,提升应用的性能和稳定性 。
五、总结与展望
HarmonyOS 网络连接 API 为开发者提供了强大且丰富的网络管理能力,无论是在智能家居、移动应用还是其他领域,都有着广泛的应用前景。通过这些 API,开发者能够轻松实现网络状态的监测、网络操作的控制以及域名解析等功能,为用户打造更加稳定、高效的网络体验。
随着 HarmonyOS 生态的不断发展和完善,未来网络连接 API 有望在更多场景中发挥重要作用。一方面,在万物互联的时代背景下,更多的设备将接入 HarmonyOS 系统,网络连接 API 需要进一步优化,以适应更加复杂的网络环境和多样化的设备需求。例如,在工业互联网领域,大量的工业设备需要实时、稳定的数据传输,网络连接 API 需要提供更高的可靠性和更低的延迟,确保生产过程的顺利进行。
另一方面,随着 5G、Wi – Fi 6 等新一代网络技术的普及,网络连接 API 也将不断更新,以充分发挥这些新技术的优势。比如利用 5G 的高速率、低延迟特性,开发出更加流畅的高清视频直播应用、实时互动游戏应用等;借助 Wi – Fi 6 的大容量、高效能特点,实现智能家居设备之间更加稳定、快速的互联互通。
对于开发者而言,持续已关注 HarmonyOS 网络连接 API 的更新和发展,不断学习和掌握新的功能和特性,将有助于开发出更具创新性和竞争力的应用程序,为 HarmonyOS 生态的繁荣贡献自己的力量。同时,也期待华为能够继续完善网络连接 API,为开发者提供更多便捷、高效的工具,共同推动 HarmonyOS 在网络连接领域的不断进步。


















暂无评论内容