【HarmonyOS】应用开发第十章-HarmonyOS原子化服务_第1页
【HarmonyOS】应用开发第十章-HarmonyOS原子化服务_第2页
【HarmonyOS】应用开发第十章-HarmonyOS原子化服务_第3页
【HarmonyOS】应用开发第十章-HarmonyOS原子化服务_第4页
【HarmonyOS】应用开发第十章-HarmonyOS原子化服务_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十一章HarmonyOS原子化服务武汉大学计算机学院赵小刚绪论在万物互联时代,人均持有设备量不断攀升,设备和场景的多样性,使应用开发变得更加复杂、应用入口更加丰富。在此背景下,应用提供方和用户迫切需要一种新的服务提供方式,使应用开发更简单、服务(如听音乐、打车等)的获取和使用更便捷。为此,HarmonyOS除支持传统方式的需要安装的应用外,还支持提供特定功能的免安装的应用(即原子化服务)。目录原子化服务定义原子化服务体验原子化服务开发基础原子化服务开发进阶原子化服务分享原子化服务定义原子化服务是HarmonyOS提供的一种面向未来的服务提供方式,是有独立入口的(用户可通过点击方式直接触发)、免安装的(无需显式安装,由系统程序框架后台安装后即可使用)、可为用户提供一个或多个便捷服务的用户应用程序形态。原子化服务由1个或多个HAP包组成,1个HAP包对应1个FA或1个PA。每个FA或PA均可独立运行,完成1个特定功能;1个或多个功能(对应FA或PA)完成1个特定的便捷服务。原子化服务特性随处可及服务发现:原子化服务可在服务中心发现并使用。智能推荐:原子化服务可以基于合适场景被主动推荐给用户使用,或在服务中心发现。服务直达原子化服务支持免安装使用。服务卡片:支持用户无需打开原子化服务便可获取服务内重要信息的展示和动态变化。跨设备原子化服务支持运行在1+8+N设备上,如手机、平板等设备。支持跨设备分享:例如接入华为分享后,用户可分享原子化服务给好友支持跨端迁移和协同原子化服务体验原子化服务定义原子化服务体验原子化服务开发基础原子化服务开发进阶原子化服务分享原子化服务体验

服务中心原子化服务流转原子化服务分享服务中心服务中心为用户提供统一的原子化服务查看、搜索、收藏和管理功能。原子化服务流转

原子化服务流转的触发方式有系统推荐流转和用户手动流转。系统推荐流转:用户使用应用程序时,所处环境中存在使用体验更优的可选设备,则系统自动为用户推荐该设备,用户可确认是否启动流转。原子化服务流转

用户手动流转:用户可以手动选择合适的设备进行流转。用户点击图标后,会调起系统提供的流转面板。面板中会展示出用户应用程序的信息及可流转的设备,引导用户进行后续的流转操作。原子化服务流转流转的技术方案跨端迁移:指在A端运行的用户应用程序,迁移到B端上并从迁移时刻A端状态继续运行,然后A端用户应用程序退出。多端协同:指多端上的不同FA/PA同时运行、或者接替运行实现完整的业务;或者,多端上的相同FA/PA同时运行实现完整的业务。原子化服务分享通过分享的方式,将原子化服务分享到其它设备上,用户确认后可直接免安装启动服务。用户可在原子化服务内选择分享,打开“华为分享”开关后,将原子化服务分享给附近同样打开了“华为分享”开关的好友,好友点击确认后直接启动服务。新浪新闻服务分享原子化服务开发基础原子化服务定义原子化服务体验原子化服务开发基础原子化服务开发进阶原子化服务分享原子化开发基础开发总体要求服务卡片定义运作机制卡片提供方主要回调JS卡片语法基础开发总体要求免安装的HAP包不能超过10MB,以提供快速响应的体验。超过此大小的HAP包不符合免安装要求,也无法在服务中心露出。通过DevEcoStudio工程向导创建原子化服务,ProjectType字段选择“Service”。对于原子化服务升级场景:版本更新时要保持免安装属性。如果新版本不支持免安装,将不允许新版本上架发布。HarmonyOS2.0以上版本。开发总体要求

如果某便捷服务的入口需要在服务中心露出,则该服务对应HAP包必须包含FA,且FA中必须指定一个唯一的mainAbility(定位为用户操作入口),mainAbility必须为PageAbility。同时,mainAbility中至少配置2*2(小尺寸)规格的默认服务卡片(也可以同时提供其他规格的卡片)及该便捷服务对应的基础信息(包括图标、名称、描述、快照),这些内容均在config.json中的ability对象中进行定义。"name":"com.whu.myapplicationjscard.MainAbility","icon":"$media:icon","description":"$string:mainability_description","formsEnabled":true,"label":"$string:entry_MainAbility","type":"page",服务卡片定义服务卡片(以下简称“卡片”)是FA的一种界面展示形式,将FA的重要信息或操作前置到卡片,以达到服务直达,减少体验层级的目的。卡片常用于嵌入到其他应用(当前只支持系统应用)中作为其界面的一部分显示,并支持拉起页面,发送消息等基础的交互功能。服务卡片包含以下三部分:卡片提供方:提供卡片显示内容的HarmonyOS应用或原子化服务,控制卡片的显示内容、控件布局以及控件点击事件。卡片使用方:显示卡片内容的宿主应用,控制卡片在宿主中展示的位置。卡片管理服务:用于管理系统中所添加卡片的常驻代理服务,包括卡片对象的管理与使用,以及卡片周期性刷新等。运作机制卡片提供方主要回调函数JS卡片语法基础数据绑定:JS页面中的数据绑定是体现在.js文件中,而JS卡片中的数据绑定是体现到.json文件中,这是最主要区别。事件绑定:卡片仅支持click通用事件,事件的定义只能是直接命令式,事件定义必须包含action字段,用以说明事件类型。卡片支持两种事件类型:跳转事件(router)和消息事件(message)。跳转事件可以跳转到卡片提供方的应用;消息事件可以将开发者自定义信息传递给卡片提供方。跳转事件中若定义了params字段,则在被拉起应用的onStart()回调的intent参数中,可用"params"作为key将跳转事件定义的params字段的值取到。原子化服务开发进阶原子化服务定义原子化服务体验原子化服务开发基础原子化服务开发进阶原子化服务分享原子化服务开发进阶卡片结构目录卡片资源访问卡片配置文件卡片实战卡片结构目录卡片资源访问卡片中的资源访问分为三类:JS模块资源,应用资源和系统资源。应用资源在卡片工程的css文件中,通过“@app.type.resource_id”的形式引用应用资源;在hml和json文件中,通过“{{$r('app.type.resource_id')}}”的形式引用应用资源,各个字段的含义与css文件相同。系统资源在hml/css/json文件中,可以引用系统预置资源,包括颜色、圆角和图片类型的资源。在卡片工程的css文件中,通过“@sys.type.resource_id”的形式引用系统资源。资源引用示例<divclass="container-inner"><textclass="title"style="background-color:{{$r('app.color.my_background_color')}}">{{$t('strings.title')}}</text><textclass="detail_text"style="background-color:{{$r('app.color.my_foreground_color')}}">{{$t('strings.detail')}}</text></div>{"color":[{"name":"my_background_color","value":"#ffff0000"},{"name":"my_foreground_color","value":"#ff0000ff"}]}卡片配置文件创建成功后,在config.json的module中会生成js模块,用于对应卡片的js相关资源。"js":[{"pages":["pages/index/index"],"name":"widget","window":{"designWidth":720,"autoDesignWidth":true},"type":"form"}]"forms":[{"jsComponentName":"widget","isDefault":true,"scheduledUpdateTime":"10:30","defaultDimension":"2*2","name":"widget","description":"Thisisaservicewidget","colorMode":"auto","type":"JS","supportDimensions":["2*2"],"updateEnabled":true,"updateDuration":1}],"launchType":"standard"}],卡片实战新建卡片卡片内容刷新卡片页面跳转卡片消息传递卡片事件触发新建卡片卡片信息配置卡片内容刷新updateForm(updateFormId,newFormBindingData(zsonObject))卡片页面跳转在前面clock1x2卡片的页面布局文件的第一行中,我们定义了一个点击事件:<divclass="container"onclick="routerEvent">该事件会激发json文件中的routerEvent回调事件,定义在action对象中"actions":{"routerEvent":{"action":"router","bundleName":"ohos.samples.jsfacard","abilityName":"ohos.samples.jsfacard.ClockAbility","params":{"message":"adddetail"}}卡片消息传递在.hml文件中定义onclick事件<divclass="container"onclick="activeEvent">json文件中定义actions{"data":{},"actions":{"activeEvent":{"action":"message","bundleName":"ohos.samples.jsfacard","abilityName":"ohos.samples.jsfacard.MainAbility","params":{"message":"jscardtemplateadddetail"}}}}@OverrideprotectedvoidonTriggerFormEvent(longformId,Stringmessage){LogU(TAG,"onTriggerFormEvent:messgeage="+message);super.onTriggerFormEvent(formId,message);

}卡片事件触发卡片事件的触发是指在卡片中的点击事件引发卡片上数据的变化,该过程就等于卡片消息传递+卡片内容刷新。<imagesrc="/common/{{status}}.svg"onclick="messageEvent"class="status-image"></image>@OverrideprotectedvoidonTriggerFormEvent(longformId,Stringmessage){ZSONObjectzsonObject=newZSONObject();if(isStatus){zsonObject.put(STATUS,PAUSE);isStatus=false;}else{zsonObject.put(STATUS,PLAY);isStatus=true;}FormBindingDataformBindingData=newFormBindingData(zsonObject);updateForm(formId,formBindingData);}原子化服务分享

原子化服务定义原子化服务体验原子化服务开发基础原子化服务开发进阶原子化服务分享原子化服务分享原子化服务所提供的便捷服务,可以通过接入华为分享实现近距离快速分享,使便捷服务可以精准快速的推送至接收方,降低用户触达服务的成本,提升用户体验。相比于传统的社交软件分享接收方无需提前安装承载服务的安装包,即可享受原生的服务体验。一般是服务端使用ServiceStub接口,客户端使用CallbackProxy接口,即“代理-桩”模式。服务分享方为服务端,服务接收方为客户端。开发步骤1.集成IDL接口,用于建立分享方与华为分享的交互通道,完成后续服务分享过程。创建IAbilityConnection连接2.在java目录的应用包下创建ShareFaManager类,用于管理分享方与华为分享的连接通道和数据交互。publicclassShareFaManager{privatefinalIAbilityConnectionmConnection=newIAbilityConnection(){@OverridepublicvoidonAbilityConnectDone(ElementNameelementName,IRemoteObjectiRemoteObject,inti){mHandler.postTask(()->{mShareService=newHwShareServiceProxy(iRemoteObject);}}@OverridepublicvoidonAbilityDisconnectDone(ElementNameelementName,inti){}}privatefinalHwShareCallbackStubmFaCallback=newHwShareCallbackStub("HwShareCallbackStub"){@OverridepublicvoidnotifyState(intstate)throwsRemoteException{mHandler.postTask(()->{if(mSharePacMap!=null){shareFaInfo();}}}publicstaticsynchronizedShareFaManagergetInstance(Contextcontext){}分享卡片&启动应用publicvoidshareFaInfo(StringappId,PacMapExpacMap){mAppId=appId;mSharePacMap=pacMap;mHandler.removeTask(mTask);shareFaInfo();bindShareService();}privatevoidbindShareService(){Intentintent=newIntent();Operationoperation=newIntent.OperationBuilder().withDeviceId("").withBundleName(SHARE_PKG_NAME).withAction(SHARE_ACTION).withFlags(Intent.FLAG_NOT_OHOS_COMPONENT).build();intent.setOperation(operation);mContext.connectAbility(intent,mConnection);}封装分

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论