今日看点

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-08-02

京剧锣鼓演奏中的忌讳

李渔在《闲情偶寄》“锣豉忌杂”一节中一曰赳:戏场锣鼓,筋节所关。当敲不敲,不当敲而敲,与宜重而轻,宜轻反重者,均足令戏文减价。” 同是一个[快长锤]锣鼓,变换演奏速度和力度(也包括音高),可用于不同的...

2025-08-02

京剧四大须生都是谁

四大须生,指四位著名的京剧老生表演艺术家。在京剧史上,有前四大须生和后四大须生的说法。而在前四大须生和后四大须生中马连良均榜上有名,因此,列名四大须生的著名京剧演员有七位,他们分别是:余叔岩、言菊朋、...

2025-08-02

京剧演唱中的十大禁忌

1、吃字:戏曲演员在唱念上,讲究口齿清楚,这样才能吐字真切,发音准确,把唱词或话白送入观众耳中。“吃字”即为咬字不清,犹如把字吃到肚子里一样,演员导致"吃字"的原因在于不能够正确的运用唇,齿,舌,牙,...

2025-08-02

董平能成为五虎将的原因

我们知道,梁山排定座次之后,就设立了很多小组,最著名的就是马军五虎将。分别是关胜,林冲,秦明,呼延灼,董平。但是通过上次的帖子,我们发现董平其实是没资格进入五虎的。今天我发现,让董平进五虎,是宋江玩弄...

2025-08-02

京剧台步:走出来的功夫

戏校每天有一堂课专门走台步,无论什么行当都必须练台步,这是基本功。假若连台步也走不好,怎么能唱戏呢?京剧讲究“四功五法”,“步”是其中很重要的一法。每个行当的台步都有自己的规范。 行当不同,台步就不同...

2025-08-02

公孙胜排名第四的原因

众所周知,梁山一百单八将虽以兄弟相称,但是其中党派林立,划分了许多阵营。这些阵营虽然不至于水火不容,却也绝对算不上和谐。在这些阵营中,对立最为明显的,则是晁盖旧部和宋江一党。 毕竟宋江取代的,是晁盖的...

2025-08-02

王安石寻笔的故事

王安石寻笔王安石听说李白有一支可以生长出花的笔之后,自己也想寻找一支这样神奇的笔,今天就给大家讲一个关于王安石寻笔的小故事。有一天王安石读书的时候从书里看到李白有一支可以生长出花的笔。他就去找他的老师...

2025-08-02

《游褒禅山记》原文及创作背景

《游褒禅山记》是北宋的政治家、思想家王安石在辞职回家的归途中游览了褒禅山后,以追忆形式写下的一篇游记。该篇游记因事见理,夹叙夹议,其中阐述的诸多思想,不仅在当时难能可贵,在当今社会也具有极其深远的现实...

2025-08-02

王安石小故事:不迩声色

不迩声色:王安石任知制诰时,王安石的妻子吴氏,给王安石置一妾。那女子前去伺候王安石,王安石问:“你是谁?”女子说自己是“家欠官债、被迫卖身”而来。王安石听罢,不仅没收她为妾,还送钱给她,帮助她还清官债...

2025-08-02