OpenHarmony南向开发案例:【 智能家居中控】

 

 应用场景简介

  • 智能家居。

今天打造的这一款全新智能家庭控制系统,凸显应用在智能控制和用户体验的特点,开创国内智能家居系统体验新局面。新的系统主要应用在鸿蒙生态。

工程版本

  • 系统版本/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”。如下图所示:

image-20220713103159887

  • 点击Build->Build Hap/APPs 编译,编译成功生成entry-debug-rich-signed.hap
烧录/安装
  • 识别到设备后点击,或使用默认快捷键Shift+F10(macOS为Control+R)运行应用。

img

  • [安装应用]如果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目录如下图所示。

img

各个文件夹和文件的作用:

  • index.ets:用于描述UI布局、样式、事件交互和页面逻辑。
  • app.ets:用于全局应用逻辑和应用生命周期管理。
  • pages:用于存放所有组件页面。
  • resources:用于存放资源配置文件。

接下来开始正文。

我们的主要操作都是在在pages目录中,然后我将用不到10分钟的时间,带大家实现这个功能。

鸿蒙开发参考指导文件

鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。

搜狗高速浏览器截图20240326151450.png

拆解

image-20220706230542588

根据设计图,我们可以分层展示,用Column包裹,大致分为这几步

image-20220706231016908

可以看下本页的结构:

image-20220706232242915

再详细一点:

image-20220706232343167

 
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")}
}

具体布局

具体布局设计到一些细节的地方,例如间隔,边框,当前组件尺寸设置等一些特殊情况,基本上就是嵌套,一层一层去实现。

代码结构

image-20220706231113785

编码

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")}
}

image-20220706230620896

针对这一页:首先是头部

image-20220706232459401

代码如下:

 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%')

其次是个人信息,包括头像等信息:

image-20220706232621793

代码如下:

 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)}}

接下来就是温度和湿度

image-20220706232715798

代码如下:

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")}
}
我们可以对下面的这块进行

我们可以对下面的这块进行封装

image-20220706231310224

代码如下

@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)}
}}

我们可以对,下面的这块进行封装

image-20220706231425068

image-20220706232810459

代码如下

@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)}
}}

最后就是底部

image-20220706232904753

代码如下:

 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北向、南向开发环境搭建

图片

《鸿蒙开发基础》

  1. ArkTS语言

  2. 安装DevEco Studio

  3. 运用你的第一个ArkTS应用

  4. ArkUI声明式UI开发

  5. .……

图片

《鸿蒙开发进阶》

  1. Stage模型入门

  2. 网络管理

  3. 数据管理

  4. 电话服务

  5. 分布式应用开发

  6. 通知与窗口管理

  7. 多媒体技术

  8. 安全技能

  9. 任务管理

  10. WebGL

  11. 国际化开发

  12. 应用测试

  13. DFX面向未来设计

  14. 鸿蒙系统移植和裁剪定制

  15. ……

图片

《鸿蒙开发实战》

  1. ArkTS实践

  2. UIAbility应用

  3. 网络案例

  4. ……

图片

 获取这份鸿蒙星河版学习资料,请点击→《鸿蒙NEXT星河版开发学习文档》

总结

鸿蒙—作为国家主力推送的国产操作系统。部分的高校已经取消了安卓课程,从而开设鸿蒙课程;企业纷纷跟进启动了鸿蒙研发

并且鸿蒙是完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,未来将会支持 50 万款的应用那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/2447.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++的策略模式,就是多态

一、定义: 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。 策略模式让算法独立于使用它的客户而独立变化。 二,核心 抽象策略(抽象基类)(Strategy&#xff09…

酷开科技逐步为用户构建健全的智慧家庭生活场景

大规模与精细化人群技术则是通过大量的计算能力和精细化的运营能力,建立用户专属数据储存区域,使得用户在使用不同电视的观影偏好和兴趣能够能够得以延续。 不拘泥于自有品牌终端数量,酷开系统除了集成在创维电视上,还服务于飞利…

idea上传项目到gitee(码云)

1、打开码云,新建仓库 2、创建 3、这就是创建成功的页面 4、复制仓库地址,后面需要用到 2、打开我们的项目:例如我现在的项目 1、idea创建git仓库 2、选择我们项目文件夹的目录 3、查看文件是否变色,变色表示成功了 4、添加到缓…

关于WSL2下安装的mysql sever服务,如何在host或外部连接使用的问题

快速提示: 在wsl2下,不允许在外部使用root来登录mysql,所以必须使用非root的帐号来登录 所以,如果明白如何做了,下面的步骤就不必看了。 下面是,给小白用户的教程: 步骤 1: 首先,使用 WSL 命令…

0元实现网站HTTP升级到HTTPS(免费https证书)

HTTPS就是在HTTP的基础上加入了SSL,将一个使用HTTP的网站免费升级到HTTPS主要包括以下几个步骤: 1 获取SSL证书 永久免费的https证书申请通道https://www.joyssl.com/certificate/select/free.html?nid16 免费的SSL证书同样能实现HTTPS,国…

uniapp同步开发h5+小程序双平台踩坑记录

最近做项目的需求是先发布h5,后续再开发上线微信小程序版,自然我选择了uniapp多平台打包,过程中也踩了一些坑。本篇文章记录了使用uniapp开发h5的注意事项,及打包成小程序需要兼容改动的内容。 1.需要在pages.json注册页面路由 在…

SpringBoot内容协商机制(就是接受数据的类型如json,xml)

目录 一、基于请求头的内容协商机制 二、基于请求参数的内容协商机制 一、基于请求头的内容协商机制 如果我们的Java服务为浏览器和安卓手机同时提供服务,浏览器期望接受的请求是JSON格式,安卓客户端期望接收的请求是XML格式,这个时候是否需…

C++中的智能指针

C中的智能指针 文章目录 C中的智能指针1.为什么需要智能指针?2.智能指针的类型2.1 std::shared_ptr2.2 std::unique_ptr2.3 std::weak_ptr Reference 笔者在学习ROS2的过程中,遇到了std::make_shared这种用法,一眼看不懂,才发现笔…

vue2使用过滤器实现菜单栏文字动态显示

文章目录 前言一、过滤器filters1.data数据2.beforeCreate 二、菜单栏文字动态显示 前言 左侧菜单栏有缩进,所以不同级别的菜单名可显示的文字数不同。顶部菜单栏是下拉框,所以文字是固定的 一、过滤器filters 由于filters不能使用this为undefined&…

Java 网络编程之TCP(三):基于NIO实现服务端,BIO实现客户端

前面的文章,我们讲述了BIO的概念,以及编程模型,由于BIO中服务器端的一些阻塞的点,导致服务端对于每一个客户端连接,都要开辟一个线程来处理,导致资源浪费,效率低。 为此,Linux 内核…

【CV】opencv特征匹配算法

特征匹配是计算机视觉领域中的一项关键任务,它用于在不同图像中寻找相似的特征点,并将它们进行匹配。这些特征点可以是图像中的角点、边缘、斑点等,在不同的图像中可能因为旋转、缩放、光照变化等因素发生变化。 在OpenCV中,提供…

华为数通HCIA ——企业网络架构以及产品线

一.学习目标:精讲网络技术,可以独立搭建和维护中小企业网络! 模拟器(华为方向请安装ENSP,Ensp-Lite已有安装包,号称功能更加完善-这意味着要耗费更多的系统资源但是仅对华为内部伙伴申请后方可使用&#x…

VS2022配置和搭建QT

一、下载QT 可以去QT官网下载:https://www.qt.io/product/development-tools。 直接安装。 二、安装qt插件 直接在vs插件市场搜索就行。 安装的时候根据提示,关闭vs自动安装 再次进去vs提示你选择qt版本,psth里边找到安装版本的qmake.exe就行 配…

卡尔曼滤波器(一):卡尔曼滤波器简介

观看MATLAB技术讲座笔记,该技术讲座视频来自bilibili账号:MATLAB中国。 一、什么是卡尔曼滤波器 卡尔曼滤波器是一种优化估计算法,是一种设计最优状态观测器的方法,其功能为: 估算只能被间接测量的变量;通…

https加密证书

网站要出去安全模式访问,加强网络安全就需要使用HTTPS加密证书。 本文主要介绍什么是HTTPS加密证书,如何申请HTTPS加密证书,如何安装HTTPS加密证书等问题展开讨论。 什么是HTTPS加密证书? HTTPS加密证书的行业产品用语叫作SSL证…

互联网大佬座位排排坐:马化腾第一,雷军第二

关注卢松松,会经常给你分享一些我的经验和观点。 这是马化腾、雷军、张朝阳、周鸿祎的座位,我觉得是按照互联网地位排序的。 马化腾坐头把交椅,这个没毛病,有他在的地方,其他几位都得喊声“大哥”。雷军坐第二把交椅…

Go语言常见错误 | 工程组织不合理 (工程结构和包的组织)

编写程序的过程中,组织代码的方式,不仅影响到代码的质量,也决定了团队的协作效率。在使用Golang进行项目开发时,工程组织不合理(包括工程结构和包的组织)是个常见的问题。下文将详述这个问题,并提供改善的方案。 工程结构不合理 Golang项目的工程结构对于代码的模块性…

ApplicationListener监听器

在spring-context 5.3.26中来看一下它的定义&#xff1a; package org.springframework.context;import java.util.EventListener; import java.util.function.Consumer;FunctionalInterface public interface ApplicationListener<E extends ApplicationEvent> extends…

[论文笔记] megatron训练参数:dataloader_type

在深度学习中&#xff0c;dataloader_type参数通常控制着数据的加载、处理和输入到模型的方式。不同的dataloader可能会按照不同的策略处理数据集&#xff0c;这可以显著影响模型训练和评估的效果。具体来说&#xff0c;single和cyclic类型通常如此区别&#xff1a; Single Dat…

关键绩效指标(KPI):明确目标及跟踪进展

在企业管理中&#xff0c;关键绩效指标&#xff08;KPI&#xff09;是一种重要的工具&#xff0c;用于明确目标并跟踪进展。通过设定和监控这些指标&#xff0c;企业能够确保员工、团队和整个组织都朝着既定的目标努力。本文将详细探讨关键绩效指标的重要性、设定方法以及如何有…