先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新HarmonyOS鸿蒙全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注鸿蒙)

正文

棋盘界面由状态栏(左上图标表示当前由X或者O执行,右上表示自己本局使用X或者O),九宫格棋盘(Grid组件绘制),button按钮组成。

build() { Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { Row({ useAlign: HorizontalAlign.Start }) { //左上图标 if (this.selfChess === EMPTY) { Image(this.current_X).height(150).width(‘30%’) } else if (this.curChess === CIRCLE) { Image(this.current_O).height(150).width(‘30%’) } else { Image(this.current_X).height(150).width(‘30%’) } //填充空格 Text(“”).width(‘40%’) //右上图标 if (this.selfChess === EMPTY) { Image(this.whiteBg).height(150).width(‘30%’) } else { Image(this.selfChess === FORK ? this.self_X : this.self_O).height(150).width(‘30%’) } }.height(‘30%’) Flex() { //堆叠容器 Stack() { //绘制九宫格 Grid() { ForEach(this.gridVis, (item) => { GridItem() { //每个子格子当前需要填充的图片 if (item.value === FORK) { Image(this.fork).backgroundColor(Color.White) } else if (item.value === CIRCLE) { Image(this.circle).backgroundColor(Color.White) } else { Image(this.whiteBg) } }.onClick(() => { //点触格子触发事件 this.dealPoint(item) }) }, item => item.id) }.columnsTemplate(‘1fr 1fr 1fr’).rowsTemplate(‘1fr 1fr 1fr’).columnsGap(3).rowsGap(3).align(Alignment.Center).alignSelf(ItemAlign.Center).backgroundColor(‘#9F5F9F’)

//根据胜负状态显示图片 if (result === YOU_WIN) { Image(KaTeX parse error: Expected 'EOF', got '}' at position 49: …4).height(224) }̲ else if (resul…r(“app.media.game_fail”)).width(224).height(224) } else if (result === TIE) { Image($r(“app.media.game_tie”)).width(224).height(224) } } }.height(‘50%’) Row({ useAlign: HorizontalAlign.Center }) { Button(‘重新开始’).width(200).height(50).fontSize(30).backgroundColor(‘#8E6B23’).onClick(() => { this.initGame() }) }.height(‘20%’) } }

3.设备认证

设备认证是依赖DeviceManager组件来实现的,详细代码参考源码RemoteDeviceModel.ets

1.创建DeviceManager实例

registerDeviceListCallback(callback) { if (typeof (this.#deviceManager) === ‘undefined’) { deviceManager.createDeviceManager(‘com.example.tictactoegame’, (error, value) => { if (error) return this.#deviceManager = value; this.registerDeviceListCallback_(callback); }); } else { this.registerDeviceListCallback_(callback); } }

2.查询可信设备列表

var list = this.#deviceManager.getTrustedDeviceListSync(); if (typeof (list) != ‘undefined’ && typeof (list.length) != ‘undefined’) { this.deviceList = list; }

3.注册设备上下线监听

this.#deviceManager.on(‘deviceStateChange’, (data) => { switch (data.action) { case 0: this.deviceList[this.deviceList.length] = data.device; this.callback(); if (this.authCallback != null) { this.authCallback(); this.authCallback = null; } break; case 2: if (this.deviceList.length > 0) { for (var i = 0; i < this.deviceList.length; i++) { if (this.deviceList[i].deviceId === data.device.deviceId) { this.deviceList[i] = data.device; break; } } } this.callback(); break; case 1: if (this.deviceList.length > 0) { var list = []; for (var i = 0; i < this.deviceList.length; i++) { if (this.deviceList[i].deviceId != data.device.deviceId) { list[i] = data.device; } } this.deviceList = list; } this.callback(); break; default: break; } });

4.设备发现

this.#deviceManager.on(‘deviceFound’, (data) => { for (let i = 0; i < this.discoverList.length; i++) { if (that.discoverList[i].deviceId === data.device.deviceId) { return; } } this.discoverList[this.discoverList.length] = data.device; this.callback(); });

5.设备认证

authDevice(deviceInfo, callback){ let extraInfo = { “targetPkgName”: ‘com.example.tictactoegame’, “appName”: ‘com.example.tictactoegame’, “appDescription”: ‘com.example.tictactoegame’, “business”: ‘0’ }; let authParam = { “authType”: 1, “appIcon”: ‘’, “appThumbnail”: ‘’, “extraInfo”: extraInfo }; this.#deviceManager.authenticateDevice(deviceInfo, authParam, (err, data) => { if (err) { this.authCallback = null; } else { this.authCallback = callback; } }); }

4.数据管理

分布式数据管理依赖@ohos.data.distributedData模块实现,详细参考源码RemoteDataManager.ets

1.导入该模块

import factory from ‘@ohos.data.distributedData’;

2.创建KVManager实例,用于管理数据库对象

registerDataListCallback(callback) { let that = this if (this.kvManager == null) { try { const config = { userInfo: { userId: ‘0’, userType: 0 }, bundleName: ‘com.example.tictactoegame’ } factory.createKVManager(config).then((manager) => { that.kvManager = manager that.registerDataListCallback_(callback) }).catch((err) => { }) } catch (e) { } } else { this.registerDataListCallback_(callback) } }

3.创建并获取KVStore数据库

registerDataListCallback_(callback) { let that = this if (that.kvManager == null) { callback() return } if (that.kvStore == null) { try { let options = { createIfMissing: true, encrypt: false, backup: false, autoSync: true, kvStoreType: 1, securityLevel: 3 } this.kvManager.getKVStore(this.STORE_ID, options).then((store) => { that.kvStore = store that.registerDataListCallback(callback) }).catch((err) => { }) } catch (e) { } } else { this.registerDataListCallback(callback) } }

4.订阅指定类型的数据变更通知

registerDataListCallback(callback) { let that = this if (that.kvManager == null) { callback() return } this.kvStore.on(‘dataChange’, 1, function(data) { if (data) { that.arr = data.updateEntries callback() } }) }

5.添加指定类型键值对到数据库

dataChange(key, value) { let that = this try { that.kvStore.put(JSON.stringify(key), JSON.stringify(value)).then((data) => { }).catch((err) => { prompt.showToast({message:‘put err:’+JSON.stringify(value)}) })

} catch (e) { } }

5.远程拉起设备app

使用FeatureAbility模块的startAbility接口拉起远程设备app

startAbilityContinuation(deviceId) { let wantValue = { bundleName: ‘com.example.tictactoegame’, abilityName: ‘com.example.tictactoegame.MainAbility’, deviceId: deviceId, parameters: { uri: ‘pages/Fight’ } }; featureAbility.startAbility({ want: wantValue }).then(() => { router.replace({ uri: ‘pages/Fight’ }) }); }

6.棋局胜负判定

对于棋盘中的任一个格子只存在已落子和未落子两种状态,我们把这两种状态定义为1和0,则九宫格可以看成是一个只有9位的二进制数,胜利状态有八种情况如下,详细代码参考源码Chess.ets:

0b111000000 0b100100100 0b100010001 0b010010010 0b001001001 0b000111000 0b000000111 0b001010100

胜负判定实现如下

isWin() { let x = this.result_X let o = this.result_O if (448 == (x & 448) || 292 == (x & 292) || 273 == (x & 273) || 146 == (x & 146) || 73 == (x & 73) || 56 == (x & 56) || 7 == (x & 7) || 84 == (x & 84)){ this.allIsTrue() return FORK } if (448 == (o & 448) || 292 == (o & 292) || 273 == (o & 273) || 146 == (o & 146) || 73 == (o & 73) || 56 == (o & 56) || 7 == (o & 7) || 84 == (o & 84)) { this.allIsTrue() return CIRCLE } let res = 0; for (let i = 0; i < 9; i++) { if (this.used[i] == false) { res = 1 break } } if (res === 1) { return CONTINUE } return EMPTY }

最后,有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(Harmony NEXT)资料用来跟着学习是非常有必要的。

为了能够帮助大家快速掌握**鸿蒙(Harmony NEXT)**应用开发技术知识。在此给大家分享一下我结合鸿蒙最新资料整理出来的鸿蒙南北向开发学习路线以及整理的最新版鸿蒙学习文档资料。

这份鸿蒙(Harmony NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了(**ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony****多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)**技术知识点。

希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

如果你是一名有经验的资深Android移动开发、Java开发、前端开发、对鸿蒙感兴趣以及转行人员,可以直接领取这份资料

获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料****

鸿蒙(Harmony NEXT)最新学习路线

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注鸿蒙)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

获取这份完整版高清学习路线,请点击→**纯血版全套鸿蒙HarmonyOS学习资料****

鸿蒙(Harmony NEXT)最新学习路线

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注鸿蒙) [外链图片转存中…(img-LHKrrJRE-1713218215575)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

参考链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: