应用场景简介
- 智能家居。
今天打造的这一款全新智能家庭控制系统,凸显应用在智能控制和用户体验的特点,开创国内智能家居系统体验新局面。新的系统主要应用在鸿蒙生态。
工程版本
- 系统版本/api版本:openharmony sdk api 8
- ide版本:deveco studio 3.0 beta4
快速上手
准备硬件环境
- [获取openharmony系统版本]:标准系统解决方案(二进制)
- [搭建标准系统环境]
- [完成dayu200开发板的烧录]
准备开发环境
- 安装最新版[deveco studio]。
- 请参考[配置openharmony sdk],完成deveco studio的安装和开发环境配置。
- 开发环境配置完成后,请参考[使用工程向导] 创建工程(模板选择“empty ability”),选择ets语言开发。
- 工程创建完成后,选择使用[真机进行调测]。
harmonyos与openharmony鸿蒙文档籽料:mau123789是v直接拿
准备工程
工程下载
git clone https://gitee.com/openharmony-sig/knowledge_demo_smart_home.git --depth=1
工程导入
-
deveco studio导入本工程;
打开deveco studio,点击file->open->下载路径/fa/smarthomecenter
编译
- 点击file > project structure > project > signing configs界面勾选“automatically generate signing”,等待自动签名完成即可,点击“ok”。如下图所示:
- 点击build->build hap/apps 编译,编译成功生成entry-debug-rich-signed.hap
烧录/安装
- 识别到设备后点击,或使用默认快捷键shift+f10(macos为control+r)运行应用。
-
[安装应用]如果ide没有识别到设备就需要通过命令安装,如下
打开openharmony sdk路径 \toolchains 文件夹下,执行如下hdc_std命令,其中path为hap包所在绝对路径。
hdc_std install -r path\entry-debug-rich-signed.hap//安装的hap包需为xxx-signed.hap,即安装携带签名信息的hap包。
好的接下来我将详细讲解如何制作
开发教学
创建好的 ets工程目录
新建工程的ets目录如下图所示。
各个文件夹和文件的作用:
- index.ets:用于描述ui布局、样式、事件交互和页面逻辑。
- app.ets:用于全局应用逻辑和应用生命周期管理。
- pages:用于存放所有组件页面。
- resources:用于存放资源配置文件。
接下来开始正文。
我们的主要操作都是在在pages目录中,然后我将用不到10分钟的时间,带大家实现这个功能。
鸿蒙开发参考指导文件
鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/readme.md点击或者复制转到。
拆解
根据设计图,我们可以分层展示,用column包裹,大致分为这几步
可以看下本页的结构:
再详细一点:
import { settingdetails } from './common/settingdetails';
import router from '@ohos.router';
@entry
@component
struct index {
@state title: string = '智能家居体验'
@state message: string = '你现在想要打开那些设置?'
@state desc: string = '点击所有适用的选项。这将帮助我们\n自定义您的主页'
@state number: string[] = ['0', '1', '2', '3', '4']
@state private isselect: boolean = true;
build() {
column() {
text(this.title)
.fontsize(80)
.fontweight(fontweight.bold).onclick(() => {
router.push({ url: 'pages/sensorscreen' })
}).margin({ bottom: 60, top: 40 })
text(this.message)
.fontsize(50)
.fontweight(fontweight.bold).onclick(() => {
router.push({ url: 'pages/sensorscreen' })
}).margin({ bottom: 60 })
text(this.desc)
.fontsize(30)
.textalign(textalign.center)
.fontweight(fontweight.bold)
.onclick(() => {
})
.margin({ bottom: 60 })
row() {
settingdetails({
image: "common/images/setting.png",
title: "maintenance\nrequests",
isselected: this.isselect!
})
settingdetails({ image: "common/images/grain.png", title: "integrations\n", isselected: this.isselect! })
settingdetails({
image: "common/images/ic_highlight.png",
title: "light\ncontrol",
isselected: this.isselect!
})
}
row() {
settingdetails({ image: "common/images/opacity.png", title: "leak\ndetector", isselected: this.isselect! })
settingdetails({
image: "common/images/ac_unit.png",
title: "temperature\ncontrol",
isselected: this.isselect!
})
settingdetails({ image: "common/images/key.png", title: "guest\naccess", isselected: this.isselect! })
}
button("next")
.fontsize(60)
.fontcolor(color.black)
.width(600)
.height(100)
.backgroundcolor(color.red)
.margin({ top: 100 })
.onclick(() => {
router.push({ url: 'pages/sensorscreen' })
})
}
.width('100%')
.height('100%').backgroundcolor("#f5f5f5")
}
}
具体布局
具体布局设计到一些细节的地方,例如间隔,边框,当前组件尺寸设置等一些特殊情况,基本上就是嵌套,一层一层去实现。
代码结构
编码
index.ets
import { settingdetails } from './common/settingdetails';
import router from '@ohos.router';
@entry
@component
struct index {
@state title: string = '智能家居体验'
@state message: string = '你现在想要打开那些设置?'
@state desc: string = '点击所有适用的选项。这将帮助我们\n自定义您的主页'
@state number: string[] = ['0', '1', '2', '3', '4']
@state private isselect: boolean = true;
build() {
column() {
text(this.title)
.fontsize(80)
.fontweight(fontweight.bold).onclick(() => {
router.push({ url: 'pages/sensorscreen' })
}).margin({ bottom: 60, top: 40 })
text(this.message)
.fontsize(50)
.fontweight(fontweight.bold).onclick(() => {
router.push({ url: 'pages/sensorscreen' })
}).margin({ bottom: 60 })
text(this.desc)
.fontsize(30)
.textalign(textalign.center)
.fontweight(fontweight.bold)
.onclick(() => {
})
.margin({ bottom: 60 })
row() {
settingdetails({
image: "common/images/setting.png",
title: "maintenance\nrequests",
isselected: this.isselect!
})
settingdetails({ image: "common/images/grain.png", title: "integrations\n", isselected: this.isselect! })
settingdetails({
image: "common/images/ic_highlight.png",
title: "light\ncontrol",
isselected: this.isselect!
})
}
row() {
settingdetails({ image: "common/images/opacity.png", title: "leak\ndetector", isselected: this.isselect! })
settingdetails({
image: "common/images/ac_unit.png",
title: "temperature\ncontrol",
isselected: this.isselect!
})
settingdetails({ image: "common/images/key.png", title: "guest\naccess", isselected: this.isselect! })
}
button("next")
.fontsize(60)
.fontcolor(color.black)
.width(600)
.height(100)
.backgroundcolor(color.red)
.margin({ top: 100 })
.onclick(() => {
router.push({ url: 'pages/sensorscreen' })
})
}
.width('100%')
.height('100%').backgroundcolor("#f5f5f5")
}
}
针对这一页:首先是头部
代码如下:
row() {
image($r("app.media.back"))
.objectfit(imagefit.contain)
.width(80)
.height(80)
.onclick(() => {
router.back()
})
blank()
text('home')
.fontsize(45)
.fontweight(fontweight.bold)
blank()
image($r("app.media.notifications_none"))
.objectfit(imagefit.contain)
.width(80)
.height(80)
.onclick(() => {
router.back()
})
}
.width('100%')
其次是个人信息,包括头像等信息:
代码如下:
row() {
image($r("app.media.logo"))//头像
.objectfit(imagefit.contain)
.width(200)
.height(200)
.borderradius(21)
column() {
text('june 14, 2022')
.fontsize(40).opacity(0.4)
.fontweight(fontweight.bold)
text('good morning,\njianguo',)
.fontsize(60)
.fontweight(fontweight.bold)
}
}
接下来就是温度和湿度
代码如下:
ow({ space: 120 }) {
column() {
text('40°',)
.fontsize(40).opacity(0.4)
.fontweight(fontweight.bold)
text('temperature',)
.fontsize(40).opacity(0.4)
}.margin({ left: 60 })
column() {
text('59%',)
.fontsize(40).opacity(0.4)
.fontweight(fontweight.bold)
text('humidity',)
.fontsize(40).opacity(0.4)
}.margin({ right: 60 })
}.margin({ top: 20 })
sensorscreen.ets
import { homedetails } from './common/homedetails';
// second.ets
import router from '@ohos.router';
@entry
@component
struct second {
@state message: string = 'hi there'
@state private isselect: boolean = true;
build() {
column() {
row() {
image($r("app.media.back"))
.objectfit(imagefit.contain)
.width(80)
.height(80)
.onclick(() => {
router.back()
})
blank()
text('home')
.fontsize(45)
.fontweight(fontweight.bold)
blank()
image($r("app.media.notifications_none"))
.objectfit(imagefit.contain)
.width(80)
.height(80)
.onclick(() => {
router.back()
})
}
.width('100%')
row() {
image($r("app.media.logo"))
.objectfit(imagefit.contain)
.width(200)
.height(200)
.borderradius(21)
column() {
text('june 14, 2022')
.fontsize(40).opacity(0.4)
.fontweight(fontweight.bold)
text('good morning,\njianguo',)
.fontsize(60)
.fontweight(fontweight.bold)
}
}
row({ space: 120 }) {
column() {
text('40°',)
.fontsize(40).opacity(0.4)
.fontweight(fontweight.bold)
text('temperature',)
.fontsize(40).opacity(0.4)
}.margin({ left: 60 })
column() {
text('59%',)
.fontsize(40).opacity(0.4)
.fontweight(fontweight.bold)
text('humidity',)
.fontsize(40).opacity(0.4)
}.margin({ right: 60 })
}.margin({ top: 20 })
row() {
homedetails({})
homedetails({ image: "common/images/lightbull.png", isselected: this.isselect! })
}
row() {
homedetails({ image: "common/images/opacity.png" })
homedetails({ image: "common/images/yytem0.png" })
}
row(){
column(){
text('add',)
.fontsize(40).opacity(0.4)
.fontweight(fontweight.bold)
text('new control',)
.fontsize(40).opacity(0.4)
}
blank()
image($r("app.media.add"))
.objectfit(imagefit.contain)
.width(100)
.height(100)
.borderradius(21).margin({right:40})
}.border({
color:color.white,
width:8,
radius:20
}).width("88%").height(150)
}.width("100%")
.height('100%').backgroundcolor("#f5f5f5")
}
}
我们可以对下面的这块进行
我们可以对下面的这块进行封装
代码如下
@entry
@component
export struct settingdetails {
@state private image: string = "common/images/setting.png"
@state private title: string = "maintenance\nrequests"
@state private isselected: boolean = true;
build() {
column() {
image(this.image)
.objectfit(imagefit.contain)
.width(140)
.height(120)
.margin(20)
.border({
width: 12, color: this.isselected ? color.white : color.red,
radius: 20
})
.onclick(() => {
this.isselected = !this.isselected;
})
text(this.title).fontsize(32).width(200).textalign(textalign.center)
}
}}
我们可以对,下面的这块进行封装
代码如下
@entry
@component
export struct settingdetails {
@state private image: string = "common/images/setting.png"
@state private title: string = "maintenance\nrequests"
@state private isselected: boolean = true;
build() {
column() {
image(this.image)
.objectfit(imagefit.contain)
.width(140)
.height(120)
.margin(20)
.border({
width: 12, color: this.isselected ? color.white : color.red,
radius: 20
})
.onclick(() => {
this.isselected = !this.isselected;
})
text(this.title).fontsize(32).width(200).textalign(textalign.center)
}
}}
最后就是底部
代码如下:
row(){
column(){
text('add',)
.fontsize(40).opacity(0.4)
.fontweight(fontweight.bold)
text('new control',)
.fontsize(40).opacity(0.4)
}
blank()
image($r("app.media.add"))
.objectfit(imagefit.contain)
.width(100)
.height(100)
.borderradius(21).margin({right:40})
}.border({
color:color.white,
width:8,
radius:20
}).width("88%").height(150)
最后呢,很多开发朋友不知道需要学习那些鸿蒙技术?鸿蒙开发岗位需要掌握那些核心技术点?为此鸿蒙的开发学习必须要系统性的进行。
而网上有关鸿蒙的开发资料非常的少,假如你想学好鸿蒙的应用开发与系统底层开发。你可以参考这份资料,少走很多弯路,节省没必要的麻烦。由两位前阿里高级研发工程师联合打造的《鸿蒙next星河版openharmony开发文档》里面内容包含了(arkts、arkui开发组件、stage模型、多端部署、分布式应用开发、音频、视频、webgl、openharmony多媒体技术、napi组件、openharmony内核、harmony南向开发、鸿蒙项目实战等等)鸿蒙(harmony next)技术知识点
如果你是一名android、java、前端等等开发人员,想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习。下面是鸿蒙开发的学习路线图。
高清完整版请点击→《鸿蒙next星河版开发学习文档》
针对鸿蒙成长路线打造的鸿蒙学习文档。话不多说,我们直接看详细资料鸿蒙(openharmony )学习手册(共计1236页)与鸿蒙(openharmony )开发入门教学视频,帮助大家在技术的道路上更进一步。
《鸿蒙 (openharmony)开发学习视频》
《鸿蒙生态应用开发v2.0白皮书》
《鸿蒙 (openharmony)开发基础到实战手册》
获取这份鸿蒙星河版学习资料,请点击→《鸿蒙next星河版开发学习文档》
openharmony北向、南向开发环境搭建
《鸿蒙开发基础》
-
arkts语言
-
安装deveco studio
-
运用你的第一个arkts应用
-
arkui声明式ui开发
-
.……
《鸿蒙开发进阶》
-
stage模型入门
-
网络管理
-
数据管理
-
电话服务
-
分布式应用开发
-
通知与窗口管理
-
多媒体技术
-
安全技能
-
任务管理
-
webgl
-
国际化开发
-
应用测试
-
dfx面向未来设计
-
鸿蒙系统移植和裁剪定制
-
……
《鸿蒙开发实战》
-
arkts实践
-
uiability应用
-
网络案例
-
……
获取这份鸿蒙星河版学习资料,请点击→《鸿蒙next星河版开发学习文档》
总结
鸿蒙—作为国家主力推送的国产操作系统。部分的高校已经取消了安卓课程,从而开设鸿蒙课程;企业纷纷跟进启动了鸿蒙研发。
并且鸿蒙是完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,未来将会支持 50 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行!
发表评论