更多内容请访问:与华为共建鸿蒙技术社区https://harmonyos.51cto.com/#zz2020年9月10日,鸿蒙2.0的发布是又一IT界一直期待的大事。发布会上,华为消费者业务软件部总裁王成录为开发者带来了全面升级版的华为鸿蒙,各方面能力大幅提升,应用开发生态完整,超级终端全场景生态,即将开启移动生态的下一个新纪元。在参加了鸿蒙2.0发布会后,转机发生在9月11日,华为携手南北业务合作伙伴和应用生态合作伙伴,共同举办各类技术分论坛活动。作为一名从事移动应用相关行业十多年的从业者,自然对华为鸿蒙2.0提供的完整应用开发生态更感兴趣。《从零开始开发HarmonyOS应用》是华为展示的第一个鸿蒙应用示例。该示例简要介绍了多设备自适应布局、输入事件处理和跨设备流程。1创建应用项目使用DevEcoStudio创建应用项目,在菜单栏中打开“文件>新建>新建项目”,在弹出的对话框中选择java项目模板。选择模板后,点击“下一步”,在接下来的界面中指定“项目名称”和“包名称”,点击“完成”创建项目。一个完善的项目包括以下目录:2.设计用户界面在JavaUI框架中,有两种编写布局的方式:在XML中声明UI布局和在代码中创建布局。这两种方法创建的布局没有本质区别。在这个例子中,应用程序页面主要是用XML编写的。2.1XML编写页面2.1.1新建XML页面在“项目”窗口,打开“入口>源>主>资源>基础”,右击“基础”文件夹,选择“新建>目录”,并命名它“布局”。右键单击“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。如果布局中引用了图片资源,图片需要放在“资源>基础>媒体”中。2.2加载XML布局在Project窗口,选择entry>src>main>java>com.huawei.example.helloworld>slice,打开MainAbilitySlice.java文件。重写onStart()方法以加载XML布局。示例代码如下:1.packagecom.huawei.example.helloworld.slice;2.importcom.huawei.example.helloworld.ResourceTable;3.importohos.aafwk.ability.AbilitySlice;4.importohos.aafwk.content.Intent;5.6.publicclassMainAbilitySliceextendsAbilitySlice{7.8.@Override9.publicvoidonStart(Intentintent){10.super.onStart(intent);11.super.setUIContent(ResourceTable.Layout_main_layout);//加载XML布局12.}13.14.@Override15.publicvoidonActive(){16.super.onActive();17.}18.19.@Override20.publicvoidonForeground(Intentintent){21.super.onForeground(intent);22.}23.}应用运行效果为如图所示:3输入事件处理输入事件有两种,一种是触摸事件,一种是按键事件。3.1触摸事件组件的一个重要功能是当用户点击该组件时,会执行相应的操作或者界面会发生相应的变化。当用户点击组件时,组件对象会收到点击事件。开发者可以自定义响应点击事件的方法。例如,通过创建一个Component.ClickedListener对象,然后通过调用setClickedListener将其分配给组件。示例代码如下:1.//1.首先导入ohos.agp.components.Image2.//2。从定义的xml中获取Image对象3.Imageremote=(Image)findComponentById(ResourceTable.Id_remote);4.//3.为Image设置点击事件回调5.remote.setClickedListener(component->{6.//4.此处添加点击按钮后的事件处理逻辑7.migrateAbility();8.});3.2按钮点击事件当设备按键被按下时,对应的Ability对象会收到KeyEvent事件。开发者可以自定义响应点击事件的方法。示例代码如下:1.publicbooleanonKeyEvent(Componentcomponent,KeyEventkeyEvent){2.if(keyEvent.isKeyDown()3.&&keyEvent.getKeyCode()==KeyEvent.KEY_DPAD_CENTER4.&&component.getId()==ResourceTable.Id_remote){5.continueAbility();6.returntrue;7.}8.returnfalse;9.}4跨设备传输4.1申请权限权限是指系统控制第三方应用或服务访问用户敏感信息的授权方式个人数据或操作敏感功能。当第三方应用程序或服务试图访问用户的个人数据或操作敏感功能时,系统将通过弹窗请求用户授权。用户可以授权此应用使用相关权限,也可以稍后取消此授权。例如,打车APP需要向用户申请,才能获取用户的地理位置信息进行定位。用户同意使用该应用程序,稍后可以取消此授权。使用“转移”功能时,需要申请迁移权限DISTRIBUTED_DATASYNC。4.1.1在config.json中声明权限1."reqPermissions":[2.{3."name":"ohos.permission.DISTRIBUTED_DATASYNC"4.}5.]4.1.2在MainAbilitySlice.java中请求权限1.privatevoidmigrateAbility(){2.if(verifySelfPermission(SystemPermission.DISTRIBUTED_DATASYNC)3.==IBundleManager.PERMISSION_GRANTED){4.this.continueAbility();5.}else{6.requestPermission(SystemPermission.DISTRIBUTED_DATASYNC);7.}8.}4.2跨设备传输依靠鸿蒙OS分布式软总线和分布式数据库能力,只需一行continueAbility代码即可完成应用在设备间的传输。在此基础上,将这些能力以接口的形式提供给开发者。事实上,转移并不是“一行代码就能完成”的。如果开发者想在传输过程中做更多的事情,可以通过IAbilifyContinuation接口中的方法来实现。IAbilityContinuation接口方法说明如下:接口名称说明Ability和AbilitySlice都需要实现IAbilityContinuation接口,并实现其中的方法。示例代码如下:1.@Override2.publicbooleanonStartContinuation(){3.returntrue;4.}5.6.@Override7.publicbooleanonSaveData(IntentParamsintentParams){8.returntrue;9.}10.11.@Override12.publicbooleanonRestoreData(IntentParamsintentParams){13.;14.}15.16.@Override17.publicvoidonCompleteContinuation(inti){18.19.}通过实例讲解和代码开发流程解读,新的布局管理,新的资源文件结构,更简洁、更强大的应用开发生态已经诞生.我们相信丰富的系统API会给我们的开发者带来更多的便利和更强大的能力。了解更多请访问:与华为官方共建鸿蒙科技社区https://harmonyos.51cto.com/#zz
