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、添加到缓…

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

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

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这种用法,一眼看不懂,才发现笔…

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

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

华为数通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证…

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

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

缓解工作压力的小窍门:保持健康与创新

目录 1 前言2 工作与休息的平衡3 保持心理健康4 社交与网络建设5 结语 1 前言 作为程序员,我们常常承受着高度的工作压力和持续的创新挑战。为了保持高效和健康,我们需要采取一些方法来缓解工作压力,同时促进个人的心理和身体健康。 2 工作…

如何在PostgreSQL中设置自动清理过期数据的策略

文章目录 方法一:使用临时表和定期清理步骤:示例代码:创建临时表:定期清理脚本(bash psql): 方法二:使用分区表和定期清理步骤:示例代码:创建分区表&#xf…

初始化Git仓库时应该运行哪个命令?

文章目录 初始化Git仓库时,你应该运行git init这个命令。这个命令的作用是在你当前所在的目录里创建一个新的Git仓库。这样,你就可以在这个目录里开始使用Git来管理你的文件了。 下面我给你举个详细的例子来说明一下: 首先,你需要…

【Mysql】用frm和ibd文件恢复mysql表数据

问题 总是遇到mysql服务意外断开之后导致mysql服务无法正常运行的情况,使用Navicat工具查看能够看到里面的库和表,但是无法获取数据记录,提示数据表不存在。 这里记录一下用frm文件和ibd文件手动恢复数据表的过程。 思路 1、frm文件&…

【代码】Python3|用Python PIL压缩图片至指定大小,并且不自动旋转

代码主体是GPT帮我写的,我觉得这个功能非常实用。 解决自动旋转问题参考:一行代码解决PIL/OpenCV读取图片出现自动旋转的问题,增加一行代码image ImageOps.exif_transpose(image) 即可恢复正常角度。 from PIL import Image, ImageOpsdef …

Linux:Win10平台上,用VMware安装Centos7.x及系统初始化关键的相关配置(分步骤操作,详细,一篇足以)

VMware安装Centos7.x镜像的详细步骤:VMWare安装Centos系统(无桌面模式) 我这里是为了安装Hadoop集群,所以,以下这些步骤是必须进行的 如果你是学习Linux,可以跳过非必须的那些配置项 我安装的版本是&…

集群工具之HAProxy

集群工具之HAProxy HAProxy简介 它是一款实现负载均衡的调度器适用于负载特别大的web站点HAProxy的工作模式 mode http:只适用于web服务mode tcp:适用于各种服务mode health:仅做健康检查,很少使用 配置HAProxy client&#x…

基于JAVA的机场航班起降与协调管理系统

毕业设计(论文)任务书 第1页 毕业设计(论文)题目: 基于JAVA的机场航班起降与协调管理系统 毕业设计(论文)要求及原始数据(资料): 1.综述机场航班调…