首页 > 其他分享 >鸿蒙应用开发:开机自启并自检网络状态

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

时间:2024-12-12 21:27:20浏览次数:5  
标签:console log 鸿蒙 data 网络 NetworkUtil 自启 开机 自检

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

开机自启

关于如何设置开机自启这篇文章已经讲的很详细了,请移步: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秒检查一次
}

标签:console,log,鸿蒙,data,网络,NetworkUtil,自启,开机,自检
From: https://blog.csdn.net/weixin_51416826/article/details/144433607

相关文章

  • 鸿蒙UI布局-相对布局
    @Entry@ComponentstructIndex{@Statemessage:string='HelloWorld';build(){RelativeContainer(){Row().width(100).height(100).backgroundColor(Color.Black).alignRules({top:{anchor:'__container__',align......
  • 鸿蒙NEXT开发案例:保质期计算
     【引言】保质期计算应用是一个基于鸿蒙NEXT框架开发的数字和文本统计组件。用户可以输入商品的生产日期和保质期天数,应用会自动计算并展示相关信息,包括保质状态、剩余天数、生产日期和到期日期。【环境准备】•操作系统:Windows10•开发工具:DevEcoStudioNEXTBeta1Bu......
  • 鸿蒙开发(1)
    一、下载开发工具1、下载中心2、安装DevEcoStudioDevEcoStudio支持Windows和macOS系统,下面将针对两种操作系统的软件安装方式分别进行介绍。Windows环境运行环境要求为保证DevEcoStudio正常运行,建议电脑配置满足如下要求:操作系统:Windows1064位、Windows1164位内......
  • 鸿蒙Next环境设备查询Environment用法总结
    一、概述Environment是ArkUI框架在应用程序启动时创建的单例对象,用于提供一系列描述应用程序运行状态的属性,其所有属性不可变(应用不可写入)且为简单类型,主要为AppStorage提供设备环境相关信息,以辅助应用根据设备环境做出不同的处理逻辑。二、Environment内置参数accessibilityE......
  • 【鸿蒙 ArkTS 开发】网络请求HTTP并渲染列表展示
    1.页面布局和网络请求(展示产品信息)在这个页面中,我们会从网络获取产品数据,并使用List组件展示产品信息。product_list_page.etsimportui;import@ohos.net.http;importohos.agp.components.List;importohos.agp.components.Text;importohos.agp.components.Image;......
  • 鸿蒙NEXT开发案例:九宫格随机
     【引言】在鸿蒙NEXT开发中,九宫格抽奖是一个常见且有趣的应用场景。通过九宫格抽奖,用户可以随机获得不同奖品,增加互动性和趣味性。本文将介绍如何使用鸿蒙开发框架实现九宫格抽奖功能,并通过代码解析展示实现细节。【环境准备】•操作系统:Windows10•开发工具:DevEcoStud......
  • 免费领900元鸿蒙先锋权益,抢先体验原生应用焕然一新
    华为Mate品牌盛典上正式发布了华为Mate70系列,用户新机到手即可升级HarmonyOSNEXT并免费领取价值高达900元“鸿蒙有礼”先锋权益,体验焕然一新的鸿蒙原生应用。近日,在华为发布的鸿蒙原生应用创意视频中,生动展现了原生应用的高品质内容体验。此外,原生应用还带来全场景、更智能的焕......
  • 鸿蒙Next持久化存储PersistentStorage用法总结
    一、概述PersistentStorage是应用程序中的可选单例对象,用于持久化存储选定的AppStorage属性,确保这些属性在应用程序重新启动时的值与关闭时相同。它将属性保留在设备磁盘上,UI和业务逻辑通过AppStorage访问其属性,AppStorage中的更改会自动同步到PersistentStorage,二者建立双向同步......
  • 鸿蒙里面编译时用到的hb是啥?
    hb是啥工具?当时看鸿蒙的编译文档,里面直接出来了hb命令,把我都看傻了。后来才知道:hb是HarmonyOS2.0里新增加的编译构建命令行工具。需要Python3.7.4及以上版本的支持,建议安装3.8.x。源码在OpenHarmony\build\lite\hb这个目录下。安装安装方法,可以直接使用pip安装打包好的工......
  • 手把手教你华为鸿蒙开发之第十二节
    华为鸿蒙开发:深入掌握TypeScript接口、类和泛型引言在现代软件开发中,TypeScript提供的接口(Interfaces)、类(Classes)和泛型(Generics)是构建可维护和可扩展代码的重要工具。华为鸿蒙操作系统的开发环境DevEcoStudio支持TypeScript,使得开发者可以利用这些特性来构建类型安全的......