公司要开发一个小玩意,主要用途就是监测远端软件包与本地安装包是否一致,如果不是则下载更新本地应用,并且要求开机会自检。现在来跟各位看官老爷们分享一下其中的一些关键,希望各位不吝指教!
开机自启
关于如何设置开机自启这篇文章已经讲的很详细了,请移步: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