今日看点

HarmonyOS应用开发:从零开始开发HarmonyOS应用

发表于话题:HarmonyOS 2
发布时间:2021-06-02

2020年9月10日,HarmonyOS 2.0的发布对于IT界来说又是一件翘首以盼的大事。发布会上,华为消费者业务软件部总裁王成录为开发者带来了一个全面升级的华为鸿蒙版本,各方面能力的大幅提升,完整的应用开发生态,超级终端的全场景生态,即将开启移动生态的下一下新纪元。

在参加完鸿蒙2.0的发布会后,又周转于9月11日华为联合南北向业务合作伙伴以及应用生态合作伙伴共同主持的各技术分论坛活动。作为一名从事移动应用相关产业近十余年的工作者,自然是对华为鸿蒙2.0提供的完整的应用开发生态更为感兴趣。

《从零开始开发HarmonyOS应用》是华为展示的第一个鸿蒙应用示例,示例简单的介绍了多设备自适应布局、输入事件处理、和跨设备流转。

1 创建应用工程

使用 DevEco Studio 创建应用工程,在菜单栏打开“File>New>New Project”,在弹出的对话框中选择java工程模板

选择好模板之后点击“Next”,在下一个界面中指定“Project Name”和“Package Name”,然后点击“Finish”即可建立工程

一个建立好的工程包含以下目录

2 设计用户界面

在Java UI框架中,提供了两种编写布局的方式:在XML中声明UI布局和在代码中创建布局。这两种方式创建出的布局没有本质差别,此例主要通过XML的方式编写应用的页面

2.1 XML编写页面

2.1.1 新建XML页面

在“Project”窗口,打开“entry > src > main > resources > base”,右键点击“base”文件夹,选择“New > Directory”,命名为“layout”。

右键点击“layout”文件夹,选择“New > File”命名为“main_layout.xml”。

在“layout”文件夹下可以看到新增了“main_layout.xml”文件。

2.1.2 编写XML代码

这个示例中自适应布局的实现,主要是基于AdaptiveBoxLayout新的布局样式,它可以将布局在横竖屏设备上进行自适应分布排列。开发者可以将布局代码写在“main_layout.xml”文件,关于布局代码怎样实现可以参考https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ui-java-component-layout-xml-0000000000500395

如果布局中引用到图片资源,需要将图片放到 “resources>base>media”

2.2加载XML布局

在“Project”窗口中,选择“entry > src > main > java > com.huawei.example.helloworld > slice”,打开“MainAbilitySlice.java”文件。重写onStart()方法加载XML布局,示例代码如下:

1.package com.huawei.example.helloworld.slice;

2.import com.huawei.example.helloworld.ResourceTable;

3.import ohos.aafwk.ability.AbilitySlice;

4.import ohos.aafwk.content.Intent;

5.

6.public class MainAbilitySlice extends AbilitySlice {

7.

8.    @Override

9.    public void onStart(Intent intent) {

10.        super.onStart(intent);

11.        super.setUIContent(ResourceTable.Layout_main_layout); // 加载XML布局

12.    }

13.

14.    @Override

15.    public void onActive() {

16.        super.onActive();

17.    }

18.

19.    @Override

20.    public void onForeground(Intent intent) {

21.        super.onForeground(intent);

22.    }

23.}

应用运行效果如图所示:

3 输入事件处理

输入事件包括两种,一种是触控事件,一种是按键事件。

3.1 触控事件

组件的一个重要作用是当用户点击组件时,会执行相应的操作或者界面出现相应的变化。用户点击组件时,组件对象将收到一个点击事件。开发者可以自定义响应点击事件的方法。例如,通过创建一个Component.ClickedListener对象,然后通过调用setClickedListener将其分配给组件。示例代码如下1. //1.先导入ohos.agp.components.Image

2. //2.从定义的xml中获取Image对象

3. Image remote = (Image) findComponentById(ResourceTable.Id_remote);

4. //3.为Image设置点击事件回调

5. remote.setClickedListener(component -> {

6.     //4.此处添加点击按钮后的事件处理逻辑

7.      migrateAbility();

8. });

3.2 按键点击事件

当设备按键按下时,相应的Ability对象将收到一个KeyEvent事件。开发者可以自定义响应点击事件的方法

一个示例代码如下1.public boolean onKeyEvent(Component component, KeyEvent keyEvent) {

2.    if (keyEvent.isKeyDown()

3.            && keyEvent.getKeyCode() == KeyEvent.KEY_DPAD_CENTER

4.            && component.getId() == ResourceTable.Id_remote) {

5.        continueAbility();

6.        return true;

7.    }

8.    return false;

9.}

4 跨设备流转

4.1 申请权限

权限即系统用于控制第三方应用或服务访问用户敏感个人数据或操作敏感能力的授权方式,当第三方应用或服务尝试访问用户个人数据或操作敏感能力时,系统通过弹窗的形式请求用户授权。用户可授权此应用使用相关权限,后续也可取消此授权。例如打车类应用为了定位,在获取用户的地理位置信息前需向用户申请,用户同意此应用使用,后续也可取消此授权。

当使用“流转”功能需要申请迁移权限DISTRIBUTED_DATASYNC

4.1.1 在config.json中声明权限1. "re": [

2.  {

3.   "name": "ohos.permission.DISTRIBUTED_DATASYNC"

4.  }

5. ]

4.1.2 在MainAbilitySlice.java中请求权限1.private void migrateAbility() {

2.    if (verifySelfPermission(SystemPermission.DISTRIBUTED_DATASYNC)

3.            == IBundleManager.PERMISSION_GRANTED) {

4.        this.continueAbility();

5.    } else {

6.        re(SystemPermission.DISTRIBUTED_DATASYNC);

7.    }

8.}

4.2 跨设备流转

仅continueAbility一行代码即可完成应用在设备之间流转,依托的还是鸿蒙OS的分布式软总线、分布式数据库的能力。在此基础上将这些能力通过接口的形式提供开发者。

事实上流转并非“一行代码可以完成”,如果开发者想在流转过程中做更多的事情,那么可以通过IAbilifyContinuation接口中的方法进行实现。

IAbilityContinuation接口方法说明如下接口名称说明

onStartContinuationPage请求迁移后,系统首先回调此方法,开发者可以在此回调中决策当前是否可以执行迁移,比如,弹框让用户确认是否开始迁移。

onSaveData如果onStartContinuation()返回true,则系统回调此方法,开发者在此回调中保存必须传递到另外设备上以便恢复Page状态的数据。

onRestoreData源侧设备上Page完成保存数据后,系统在目标侧设备上回调此方法,开发者在此回调中接受用于恢复Page状态的数据。注意,在目标侧设备上的Page会重新启动其生命周期,无论其启动模式如何配置。且系统回调此方法的时机在onStart()之前。

onCompleteContinuation目标侧设备上恢复数据一旦完成,系统就会在源侧设备上回调Page的此方法,以便通知应用迁移流程已结束。开发者可以在此检查迁移结果是否成功,并在此处理迁移结束的动作,例如,应用可以在迁移完成后终止自身生命周期。

Ability以及AbilitySlice都需要实现IAbilityContinuation接口,并实现其中的方法。示例代码如下1. @Override

2. public boolean onStartContinuation() {

3.     return true;

4. }

5.

6. @Override

7. public boolean onSaveData(IntentParams intentParams) {

8.     return true;

9. }

10.

11. @Override

12. public boolean onRestoreData(IntentParams intentParams) {

13.     return true;

14. }

15.

16. @Override

17. public void onCompleteContinuation(int i) {

18.

19. }

通过示例讲解及代码开发过程解读,新的布局管理,新的资源文件结构,预示更为简洁且功能更为强大的应用开发生态已经诞生。相信丰富的系统API将带给我们开发者更多的便利及更强大的能力。

作者: HarmonyOS技术社区

标签组:[软件] [应用开发] [xml语言

本文来源:https://www.kandian5.com/articles/23979.html

相关阅读

张颂文被骂惨了!参加综艺被吐槽太装、爹味儿足,网友:人设崩了

谁能想到,因为一个综艺节目,张颂文的口碑竟然崩了。 近日,实力派演员张颂文参与的综艺节目《灿烂的花园》开播,这也是他自从凭借电视剧《狂飙》爆红以来的第一个综艺节目。很多喜欢他的网友都乐意去看一看,这个...

2024-04-28

鹿晗关晓彤传出好消息,炸上热搜!

来源:黎兜兜CP粉又过年了。 4月20日鹿晗生日,关晓彤又一次卡点送祝福。 简单的一句“生日快乐”,而鹿晗马上回复“收到收到又老了一岁啦”,两个人的互动莫名有种老夫老妻的感觉。算起来,这已经是关晓彤第...

2024-04-28

《甜蜜家园》第2集剧情解析 《甜蜜家园》第2集分集看点

近日刚播出的《甜蜜家园》是许多观众非常期待的作品,还在宣发阶段就有了不错的热度和人气,播出之后也是没有愧对于大家的期待,就最近关于《甜蜜家园》第2集分集剧情介绍一直大家想要了解的,所以今天小编就和大家...

2024-04-28

连她都被网暴,够离谱的

大家好,我是马香玉。 谁能想到,周迅竟也有被全网骂的一天。 起因是,最近网上掀起了一股吐槽《如懿传》的热潮。 随后不久,便有不少up主发声称自己的相关吐槽视频被周迅举报下架了。这下子,一石激起千层浪...

2024-04-28

《甜蜜家园》第10集剧情解析 《甜蜜家园》第10集分集看点

《甜蜜家园》的播出引起了观众们的极大兴趣,无论是故事情节还是人物演技,都让人沉浸其中,特别最近关于该剧《甜蜜家园》第10集分集剧情介绍是现在网上讨论的最多的,下面小编就来聊一下这个话题。《甜蜜家园》第...

2024-04-28

晚学又更新了,他真是热衷打脸,永不改变

奶嘴夫妇又出来送热闹啦。 是的,就是晚晚和林瀚。前两天,林瀚做直播,晚学家们来围观。 晚学家是啥,大家都知道吧。 就是研究打假奶嘴夫妇的家人,数量很庞大,遍布全网络,远超奶嘴夫妇的粉丝。 直播里,晚学...

2024-04-28

短剧《Messi狗》讲的什么 短剧《Messi狗》剧情简介

最近,一部名为《Messi狗》的电视剧引起了广泛关注。每一集的更新都引起了观众热烈的讨论,这部剧中的各种情节和角色发展也深深地打动了观众的心。其中,短剧《Messi狗》剧情介绍就是备受瞩目的一个话题。...

2024-04-28

直播写作业的张静初,治好了多少女性的年龄焦虑

在直播间里写作业的张静初,成了近来小红书的一道奇景。 别人直播带货,她直播学习,状态还真不像演的。 有人纳闷:「财富自由的女明星,为什么还要每天写作业?」 抱着好奇心点进直播间的观众越多,对于这一现象...

2024-04-28

《甜蜜家园》第9集剧情解析 《甜蜜家园》第9集分集看点

随着电视剧的热播,“《甜蜜家园》第9集分集剧情介绍”也逐渐引起了广大粉丝的关注,众所周知该剧一经播出,就以其精彩的剧情,精良的制作,精心的演绎,受到了观众的一致好评,拿下了收视第一的宝座,是非常值得一...

2024-04-28

王心凌演唱会成大型老板认领现场,网友们在评论区认领老板

在近日的一场王心凌演唱会中,一场别开生面的“老板认领”活动在网络上掀起了轩然大波。 原本是一场音乐盛宴,却意外地成为了一场全民参与的互动狂欢,网友们纷纷在评论区认领自己的“老板”,一时间,王心凌的演唱...

2024-04-28