当前位置: 首页 > java >正文

鸿蒙应用开发:开机自启并自检网络状态

公司要开发一个小玩意,主要用途就是监测远端软件包与本地安装包是否一致,如果不是则下载更新本地应用,并且要求开机会自检。现在来跟各位看官老爷们分享一下其中的一些关键,希望各位不吝指教!

开机自启

关于如何设置开机自启这篇文章已经讲的很详细了,请移步:OpenHarmony 应用开机自启。

不过,公司为了保证应用程序的安全性和可信度,还为应用程序设置了签名。签名这步已有大佬写的很详细了,我也是参照的这一篇:鸿蒙应用签名打包、测试以及发布。

签名搞定后,项目文件目录下会多一个文件夹:signature。这个文件夹下就存放着所有有关应用签名的文件,具体内容看下图:

网络自检

在系统启动后,自动执行下载任务前,需确保网络连接的可用性。鉴于网络状态的不确定性,必须等待网络连接成功之后,方可启动下载功能。为此,建议采用基于事件驱动的编程模型来实现这一逻辑。

网络状态监测

鸿蒙的@ohos.net.connectionAPI提供了管理网络一些基础能力,包括获取默认激活的数据网络、获取所有激活数据网络列表、开启关闭飞行模式、获取网络能力信息等功能。其中NetConnection.on('netAvailable')和NetConnection.on(‘netLost’)分别能够监听网络的可用与丢失状态。

static NetState() {// 订阅指定网络状态变化的通知NetworkUtil.conn.register((err: BusinessError, data: void) => {console.log(JSON.stringify(err));});// 订阅事件,如果当前指定网络可用,通过on_netAvailable通知用户NetworkUtil.conn.on('netAvailable', ((data: connection.NetHandle) => {console.log(TAG + "net is available, netId is " + data.netId);NetworkUtil.NetworkChange = true}));// 订阅事件,设备从有网络到无网络状态会触发netLost事件NetworkUtil.conn.on('netLost', (data: connection.NetHandle) => {console.info("Succeeded to get data: " + JSON.stringify(data));NetworkUtil.NetworkChange = false});// 订阅事件,如果当前指定网络不可用,通过on_netUnavailable通知用户NetworkUtil.conn.on('netUnavailable', ((data: void) => {console.log(TAG + "net is unavailable, data is " + JSON.stringify(data));NetworkUtil.NetworkChange = false}));
}//返回当前设备网络状态
getNetworkStatus(): Boolean {NetworkUtil.NetState()return NetworkUtil.NetworkChange
}
开机网络自检

在开机后进行网络自检其实很简单,在ServiceExtAbility.ets文件里使用一个轮询检查网络状态的函数即可。

// 事件驱动-网络是否连接成功
// 定义网络检查函数
async function startNetworkCheck(context) {// 最大重试次数const MAX_RETRIES = 3;let retryCount = 0;let networkCheckInterval;// 清理函数const cleanup = () => {if (networkCheckInterval) {clearInterval(networkCheckInterval);networkCheckInterval = null;}};// 创建一个轮询间隔networkCheckInterval = setInterval(async () => {try {if (Network.getNetworkStatus()) {// 网络连接成功,清除轮询cleanup();// 检查必要的配置是否存在if (!PreferenceModel.hasPreference('register-ip') || !PreferenceModel.hasPreference('register-port')) {throw new Error('缺少必要的配置信息');}const ip = PreferenceModel.getPreference('register-ip').toString();const port = JSON.parse(PreferenceModel.getPreference('register-port').toString());console.log('zxxx' + ip + '--' + port)try {await DownZip.downloadzip(context, ip, port, 'OHOS', false);console.log('下载完成,开始安装...');} catch (downloadError) {console.error('下载失败:', JSON.stringify(downloadError));if (retryCount < MAX_RETRIES) {retryCount++;console.log(`下载失败,正在进行第${retryCount}次重试...`);cleanup();  // 清理当前interval// 重新启动检查await startNetworkCheck(context);} else {console.error('下载失败,已超过最大重试次数:', downloadError);cleanup();}}} else {console.log('等待网络连接...');}} catch (error) {console.error('网络检查出错:', error);cleanup();  // 发生错误时清理interval}}, 2000);  // 每2秒检查一次
}

http://www.xdnf.cn/news/19401.html

相关文章:

  • docker,数据卷
  • Flink部署实战:从入门到优化
  • Linux基本工具(yum、vim、gcc、Makefile、git、gdb)
  • 【模型训练篇】VeRL分布式基础 - 框架Ray
  • 解决 uni-app 中大数据列表的静默UI渲染失败问题
  • Q1 Top IF 18.7 | 基于泛基因组揭示植物NLR进化
  • C语言强化训练(2)
  • 生物学自然主义:心灵哲学中的生物性探索
  • 编程与数学 03-004 数据库系统概论 11_数据库的维护
  • 线阵相机和镜头选型案例介绍
  • 雪花算法是什么,时钟回拨问题怎么解决?
  • 第2章 MySQL的调控按钮-启动选项和系统变量
  • React 状态管理演进之路:从 Dva 到现代架构
  • YOLO 目标检测:YOLOv2基本框架、多尺度训练、锚框、维度聚类、位置预测、passthrough
  • 房屋租赁系统|基于SpringBoot和Vue的房屋租赁系统(源码+数据库+文档)
  • 秋招 AI 方向 —— 华为机考
  • Spring MVC 九大组件源码深度剖析(六):HandlerExceptionResolver - 异常处理的艺术
  • 雪花算法实现分布式环境下的高效动态ID生成
  • 20.28 《4bit量化模型预处理揭秘:如何节省75%显存高效微调LLM?》
  • leetcode_74 搜索二维矩阵
  • 通信原理(006)——分贝(dB)超级详细
  • Tomcat 中部署 Web 应用
  • Git 远程仓库操作:推送到远程仓库、拉取远程仓库到本地仓库
  • 软考备考(5)
  • 《以奋斗者为本》读书笔记(上篇:价值管理)
  • 下一波红利:用 #AI编程 闯入小游戏赛道,#看广告变现 模式正在崛起!
  • Ruoyi-vue-plus-5.x第一篇Sa-Token权限认证体系深度解析:1.4 Sa-Token高级特性实现
  • 机器人控制器开发(底层模块)——Rk3588 CAN0调试
  • 检索优化-混合检索
  • Java学习历程17——利用泛型优化自定义动态数组