今日看点

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将带给我们开发者更多的便利及更强大的能力。


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

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

相关阅读

怀孕期间阴道出现褐色分泌物,要尽快就医

阴道分泌物,一般指「白带」,正常呈白色或透明。在孕期出现褐色分泌物,一般是由阴道出血、宫腔胚胎异常或是胎盘异常出血等引起,由于分泌物在阴道停留时间长、排出较晚,就会变成褐色。妊娠期一般分为三个阶段,妊...

2025-10-31

胎梦暗示生女孩?专家拆解梦见小鸟、白色羽毛、晨露含义

自古以来,胎梦就被视为预测胎儿性别和未来发展的重要线索。许多准妈妈在怀孕期间会做各种奇特的梦,其中 梦见小鸟、白色羽毛和晨露 等意象尤为常见,且常被民间解读为可能预示生女孩的征兆。这些梦境究竟蕴含着怎...

2025-10-31

生女孩胎梦大全:梦见花卉、水果、水的预兆与解析!

从古至今,胎梦一直被准父母们视为预测宝宝性别与未来发展的重要线索。本文将深入解析梦见 花卉、水果、水 等常见意象与生女孩之间的神秘联系,为您提供一份详尽的胎梦指南。一、胎梦文化背景与科学认知胎梦,即...

2025-10-31

生女孩胎梦TOP10:月亮、雪花、紫藤花等吉祥梦境盘点

关于生女孩的胎梦,传统解读中往往与 柔和、纯净、优雅的意象 相关联。月亮代表阴柔之美,花朵象征生命的绽放,水元素寓意温柔如水,这些都在文化符号学中与女性特质紧密相连。而现代心理学则认为,这些梦境可能反...

2025-10-31

胎梦里的温柔暗示:梦见月亮、珍珠、蝴蝶大概率生女儿?

在东亚传统文化中,胎梦一直被视为预测胎儿性别和未来命运的重要征兆。当准妈妈们梦见 皎洁的月亮、晶莹的珍珠或翩翩的蝴蝶时,常常会听到"这可能是怀女孩的征兆"的说法。这些美丽而温柔的梦境意象,为何会与女孩...

2025-10-31

生女孩胎梦科学吗?心理学+民间说法双角度解析梦见蝴蝶

在备孕和怀孕期间,许多准父母都会经历各种奇妙的梦境,其中 "梦见蝴蝶" 常被认为与生女孩有关。这种关联不仅存在于中国民间传统中,在世界各地的文化里也有着丰富的解读。本文将从 心理学科学视角 和 民间传...

2025-10-31

生女孩胎梦VS生男孩胎梦:5大关键区别,你梦对了吗?

自古以来,胎梦就被视为预测胎儿性别和未来发展的重要征兆。许多准父母在怀孕期间都会经历各种生动奇特的梦境,这些梦境往往被赋予特殊的含义。在传统文化中, 生女孩和生男孩的胎梦有着显著的区别 ,从梦境内容到...

2025-10-31

社区医生:怀孕别养猫了,二手烟反倒没事!孕妇无语了

河南有一个孕妈妈怀孕五周去社区医院做阴道B超,确定自己有没有怀孕。当时夫妻俩想到怀孕了都非常关注,所以两夫妻都去医院了。而这个孕妈妈的老公有吸烟的习惯,她就希望能跟医生说一下,让老公戒烟,而且她家里面...

2025-10-31

男人抽烟对家庭伤害多大?老婆流产,女儿肺癌,儿子身高少10厘米

虽然每一包香烟上面都写着‘吸烟有害健康’,但是抽烟的人感受到的是烟可以带给他快乐。比如饭后抽一根烟就感觉自己像是神仙一样;比如说在困的时候抽一根烟能够解乏;比如说在无聊的时候抽...

2025-10-31

宝宝摔下床后,别急着立刻扶起来,了解"黄金十秒"很重要

广东中山一位宝妈面对孩子头朝下摔下床后的做法在短视频平台获得了众多网友的称赞。一是她没有慌乱;二是处理方法十分科学,连不少专家都留言夸赞“妈妈的做法让孩子受到的伤害降到最低”、...

2025-10-31