CH10-HarmonyOS原子化服务

2023-11-18

前言

  • 在万物互联时代,人均持有设备量不断攀升,设备和场景的多样性,使应用开发变得更加复杂、应用入口更加丰富。
  • 在此背景下,应用提供方和用户迫切需要一种新的服务提供方式,使应用开发更简单、服务(如听音乐、打车等)的获取和使用更便捷。
  • 为此,HarmonyOS除支持传统方式的需要安装的应用外,还支持提供特定功能的免安装的应用(即原子化服务)。

目标

  • 了解到原子化服务的定义和优点
  • 掌握原子化卡片的开发方法服务分享的开发方法

原子化服务定义

  • 原子化服务是HarmonyOS提供的一种面向未来的服务提供方式是有独立入口的(用户可通过点击方式直接触发)、免安装的(无需显式安装,由系统程序框架后台安装后即
    可使用)、可为用户提供一个或多个便捷服务的用户应用程序形态。
  • 原子化服务由1个或多个HAP包组成1个HAP包对应1个FA或1个PA。每个FA或PA均可独立运行,完成1个特定功能;1个或多个功能(对应FA或PA)完成1个特定的便捷服务。

原子化服务特性

  • 随处可及
  • 服务发现:原子化服务可在服务中心发现并使用
  • 智能推荐:原子化服务可以基于合适场景被主动推荐给用户使用,或在服务中心发现。
  • 服务直达
  • 原子化服务支持免安装使用
  • 服务卡片:支持用户无需打开原子化服务便可获取服务内重要信息的展示和动态变化
  • 跨设备
  • 原子化服务支持运行在1+8+N设备上,如手机、平板等设备;
  • 支持跨设备分享:例如接入华为分享后,用户可分享原子化服务给好友;
  • 支持跨端迁移和协同

原子化服务体验

  • 服务中心
  • 原子化服务流转
  • 原子化服务分享

服务中心

  • 服务中心为用户提供统一的原子化服务查看搜索收藏管理功能

20220125195055

原子化服务流转

  • 原子化服务流转的触发方式有系统推荐流转用户手动流转

    • 系统推荐流转:用户使用应用程序时,所处环境中存在使用体验更优的可选设备,则系统自动
      为用户推荐该设备,用户可确认是否启动流转

    20220125203047

    • 用户手动流转:用户可以手动选择合适的设备进行流转。用户点击图标后,会调起系统提供的流转面板。面板中会展示出用户应用程序的信息及可流转的设备,引导用户进行后续的流转操作。

20220125203128

  • 流转的技术方案

    • 跨端迁移:指在A端运行的用户应用程序,迁移到B端上并从迁移时刻A端状态继续运行,然后A端用户应用程序退出;

    • 多端协同:指多端上的不同FA/PA同时运行、或者接替运行实现完整的业务。或者多端上的相同FA/PA同时运行实现完整的业务。

原子化服务分享

  • 通过分享的方式,将原子化服务分享到其它设备上,用户确认后可直接免安装启动服务。用户可在原子化服务内选择分享,打开“华为分享”开关后,将原子化服务分享给附近同样打开了“华为分享”开关的好友,好友点击确认后直接启动服务。

新浪新闻服务分享

20220125203158

原子化开发基础

  • 开发总体要求
  • 服务卡片定义
  • 运作机制
  • 卡片提供方主要回调
  • JS卡片语法基础

开发总体要求

服务卡片定义

  • 服务卡片(以下简称“卡片”)是FA的一种界面展示形式,将FA的重要信息或操作前置到卡片,以达到服务直达,减少体验层级的目的。
  • 卡片常用于嵌入到其他应用(当前只支持系统应用)中作为其界面的一部分显示,并支持拉起页面,发送消息等基础的交互功能。服务卡片包含以下三部分:
    • 卡片提供方:提供卡片显示内容的HarmonyOS应用或原子化服务,控制卡片的显示内容、控件布局以及控件点击事件;
    • 卡片使用方:显示卡片内容的宿主应用,控制卡片在宿主中展示的位置;
    • 卡片管理服务:用于管理系统中所添加卡片的常驻代理服务,包括卡片对象的管理与使用,以及卡片周期性刷新等。

运作机制

20220125213115

卡片提供方主要回调函数

20220125213153

JS卡片语法基础

  • 数据绑定:JS页面中的数据绑定是体现在.js文件中,而JS卡片中的数据绑定是体现到.json文件中,这是最主要区别。
  • 事件绑定:卡片仅支持click通用事件,事件的定义只能是直接命令式,事件定义必须包含action字段,用以说明事件类型。卡片支持两种事件类型:跳转事件(router)和消息事件(message)。
    • 跳转事件可以跳转到卡片提供方的应用
    • 消息事件可以将开发者自定义信息传递给卡片提供方。跳转事件中若定义了params字段,则在被拉起应用的onStart()回调intent参数中,可用“params”作为key将跳转事件定义的params字段的值取到

原子化服务开发进阶

  • 卡片结构目录
  • 卡片资源访问
  • 卡片配置文件
  • 卡片实战

卡片结构目录

20220125213522

卡片资源访问

  • 卡片中的资源访问分为三类:JS模块资源,应用资源和系统资源。
    • 应用资源
      • 在卡片工程的css文件中,通过“@app.type.resource_id”的形式引用应用资源;
      • 在hml和json文件中,通过“{{$r('app.type.resource_id')}}”的形式引用应用资源,各个字段的含义与css文件相同。
    • 系统资源
      • 在hml/css/json文件中,可以引用系统预置资源,包括颜色、圆角和图片类型的资源。在卡片工程的css文件中,通过“@sys.type.resource_id”的形式引用系统资源。
      • 资源引用示例
<div class="container-inner">
    <text class="title" style="backgroundcolor:{{$r('app.color.my_background_color')}}">{{ $t('strings.title') }}</text>
    <text class="detail_text" style="backgroundcolor:{{$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": "This is a service widget",
         "colorMode": "auto",
         "type": "JS",
         "supportDimensions": [
             "2*2"],
         "updateEnabled": true,
         "updateDuration": 1
        }],
    "launchType": "standard"
    } ],
    

卡片实战

  • 新建卡片

  • 卡片内容刷新

  • 卡片页面跳转

  • 卡片消息传递

  • 卡片事件触发

新建卡片

20220125214040

卡片信息配置

20220125214106

卡片内容刷新

  • updateForm(updateFormId, new FormBindingData(zsonObject))

    20220125214220

卡片页面跳转

  • 在前面clock1x2卡片的页面布局文件的第一行中,我们定义了一个点击事件
<div class="container" onclick="routerEvent">
  • 该事件会激发json文件中的routerEvent回调事件,定义在action对象中

    "actions": {
        "routerEvent": {
            "action": "router",
            "bundleName": "ohos.samples.jsfacard",
            "abilityName": "ohos.samples.jsfacard.ClockAbility",
            "params": {
                "message": "add detail"
            }
        }
    

卡片消息传递

  • 在.hml文件中定义onclick事件
<div class="container" onclick="activeEvent">   </div>
  • json文件中定义actions
{
    "data": {},
    "actions": {
        "activeEvent": {
            "action": "message",
            "bundleName": "ohos.samples.jsfacard",
            "abilityName": 
            "ohos.samples.jsfacard.MainAbility",
            "params": {
                "message": "jscardtemplate add detail"
            }
        } }}
@Override protected void onTriggerFormEvent(long 
                                            formId, String message) {
    LogUtils.info(TAG, "onTriggerFormEvent: 
    messgeage=" + message);
    super.onTriggerFormEvent(formId, message);
......
}

20220125214602

卡片事件触发

  • 卡片事件的触发是指在卡片中的点击事件引发卡片上数据的变化,该过程就等于卡片消 息传递+卡片内容刷新

    <image src="/common/{{status}}.svg" onclick="messageEvent" class="status-image"></image>
    
    @Override protected void onTriggerFormEvent(long formId, String message) {
        ZSONObject zsonObject = new ZSONObject();
        if (isStatus) {
            zsonObject.put(STATUS, PAUSE);
            isStatus = false;
        } else {
            zsonObject.put(STATUS, PLAY);
            isStatus = true;
        }
        FormBindingData formBindingData = new FormBindingData(zsonObject);
        updateForm(formId, formBindingData);
    }
    
    

原子化服务分享

  • 原子化服务所提供的便捷服务,可以通过接入华为分享实现近距离快速分享使便捷服务可以精准快速的推送至接收方,降低用户触达服务的成本,提升用户体验。相比于传统的社交软件分享接收方无需提前安装承载服务的安装包,即可享受原生的服务体验。
  • 一般是服务端使用ServiceStub接口客户端使用CallbackProxy接口,即“代理-桩”模式。服务分享方为服务端,服务接收方为客户端。
    20220125214827

开发步骤

集成IDL接口用于建立分享方与华为分享的交互通道,完成后续服务分享过程
20220125214932

  • 在java目录的应用包下创建ShareFaManager类用于管理分享方与华为分享的连接通道和数据交互
public class ShareFaManager {
    private final IAbilityConnection mConnection = new IAbilityConnection() {
        @Override
        public void onAbilityConnectDone(ElementName elementName, IRemoteObject iRemoteObject, int i) {
            mHandler.postTask(()->{mShareService = new HwShareServiceProxy(iRemoteObject);}
    }
		@Override
		public void onAbilityDisconnectDone(ElementName elementName, int i) {}
}

private final HwShareCallbackStub mFaCallback = new HwShareCallbackStub("HwShareCallbackStub") { @Override
                                                                                                public void notifyState(int state) throws RemoteException {
                                                                                                    mHandler.postTask(()->{if (mSharePacMap != null) {shareFaInfo(); } }}
                                                                                                public static synchronized ShareFaManager getInstance(Context context) {}

分享卡片&启动应用

public void shareFaInfo(String appId, PacMapEx pacMap) { 
    mAppId = appId;
    mSharePacMap = pacMap;
    mHandler.removeTask(mTask);
    shareFaInfo();
    bindShareService();
}
private void bindShareService() {
    Intent intent = new Intent();
    Operation operation = new Intent.OperationBuilder()
        .withDeviceId("")
        .withBundleName(SHARE_PKG_NAME)
        .withAction(SHARE_ACTION)
        .withFlags(Intent.FLAG_NOT_OHOS_COMPONENT)
        .build();
    intent.setOperation(operation);
    mContext.connectAbility(intent, mConnection);
}

封装分享数据

封装服务分享数据,调用ShareFaManager封装的接口完成服务的分享。

20220126154431

加入APP ID

PacMapEx pacMap = new PacMapEx();
...
pacMap.putObjectValue(ShareFaManager.HM_BUNDLE_NAME, getBundleName());
...
pacMap.putObjectValue(ShareFaManager.HM_FA_NAME, "FAShareDemo"); 
ShareFaManager.getInstance(ClockAbilitySlice.this).shareFaInfo("728380991055342400", pacMap);

20220126154551

分享运行结果

20220126154721

本章总结

  • HarmonyOS原子化服务是HarmonyOS系统提出的一种全新的服务提供方式,可以给用户带来快捷的服务体验。
  • 本章首先介绍了HarmonyOS原子化服务的定义与特性;接着描述了原子化服务在HarmonyOS系统中的多种应用场景;然后介绍了原子化服务开发的要求和运作机制,服务方的主要回调函数等。
  • 在掌握这些卡片基础知识后,本章进一步介绍了卡片项目的结构资源访问方式配置文件配置过程。最后本章用一个详细的卡片项目案例将前面的知识点进行了综合应用,并展示了卡片内容刷新事件交互页面路由的实现方法;原子化分享功能也集成到卡片项目中

[外链图片转存中…(img-c3Zz6LyN-1643194887413)]

本章总结

  • HarmonyOS原子化服务是HarmonyOS系统提出的一种全新的服务提供方式,可以给用户带来快捷的服务体验。
  • 本章首先介绍了HarmonyOS原子化服务的定义与特性;接着描述了原子化服务在HarmonyOS系统中的多种应用场景;然后介绍了原子化服务开发的要求和运作机制,服务方的主要回调函数等。
  • 在掌握这些卡片基础知识后,本章进一步介绍了卡片项目的结构资源访问方式配置文件配置过程。最后本章用一个详细的卡片项目案例将前面的知识点进行了综合应用,并展示了卡片内容刷新事件交互页面路由的实现方法;原子化分享功能也集成到卡片项目中
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CH10-HarmonyOS原子化服务 的相关文章

  • 调试最长的一帧(第23天)

    看看总体进度 第22天通过CUllvisitor创建了渲染树和状态树 并进行必要的剔除 接下来进行排序和优化 RenderStage sort函数时按照前序渲染台 当前渲染台和后续渲染台的顺序进行 其中前序渲染台和后续渲染台通过Camera
  • 一台云服务器怎么挂多个网站吗,一台云服务器怎么挂多个网站

    一台云服务器怎么挂多个网站 内容精选 换一换 通过华为云备案 需要先购买华为云中国大陆节点服务器 用于网站备案使用 后称为 备案服务器 目前可用于华为云备案的服务器 请参见备案服务器 如果您的华为云帐号A中没有可备案的服务器 华为云帐号B中
  • .npmrc给单独包设置源

    1 package json中的dependencies或者devDependencies模块设置要下载包的版本信息 例如 dependencies antv g 3 4 10 2 在 npmrc中设置对应源 antv g registry
  • 通过css去掉input框默认样式

    input 去除阴影 box shadow none 聚焦input的蓝色边框 outline none textarea 禁止拖拽 resize none 去除边框 border none 常用于IOS下移除原生样式 webkit app

随机推荐

  • Java使用opencv计算两个多边形交并比IOU、重叠面积占比

    opencv引入配置看这里https blog csdn net angelpaiy article details 126870213 需要引入的opencv类 import org opencv core Scalar import o
  • Dart中常用的集合类型List、Set、Map、Queue

    Dart中常用的集合类型 List 列表 有序集合 可以修改数据 Dart中List对应数组 可以通过索引访问元素 Set 集合 无序 不可重复 常用于过滤重复数据 Map 映射 键值对集合 键必须唯一 值可以重复 常用于存储关联数据 Qu
  • 分享5个关于 Vue 的小知识,希望对你有所帮助(五)

    大家好 今天我继续分享5个关于 Vue 的小知识 希望对你有所帮助 往期文章 分享5个关于 Vue 的小知识 希望对你有所帮助 一 分享5个关于 Vue 的小知识 希望对你有所帮助 二 分享5个关于 Vue 的小知识 希望对你有所帮助 三
  • CTRL键不能使用(非硬件问题)

    如果ctrl键不能用了 并且排除是硬件问题 排除方法 电脑有两个CTRL键 可以试试另一个是否可以使用 那么肯定是驱动除了问题 相关链接 根据上面的教程修改之后 我的驱动是无法更新的 我换了一个驱动就能正常使用了 选择驱动程序详细信息 然后
  • ad7606中文资料_16位ADC数据采集模块AD7606(原理图、中文数据手册、例程等)

    AD7606 数据采集模块 16位ADC 8通道同时200KHz频率采集 每秒8 200K样本 SPI接口或8080 16位并口 可自行选择 AD7606 数据采集模块特性 使用AD7606 高精度16位ADC芯片 8路模拟输入 阻抗1M欧
  • ZED安装

    1 下载对应版本的ubantu的sdk 运行 run文件 2 安装过程中可能会存在依赖关系错误的问题 可以解决的方法有二 一 换源 二 网上搜依赖关系的解决方法 3 运行get api py会出现一直downing的情况 解决方法有二 一
  • Linux curl 命令详解

    该命令设计用于在没有用户交互的情况下工作 curl 是一个工具 用于传输来自服务器或者到服务器的数据 向服务器传输数据或者获取来自服务器的数据 可支持的协议有 DICT FILE FTP FTPS GOPHER HTTP HTTPS IMA
  • 区块链的几大模块

    共识的分类 POW POW的一般理解 根据难度做SHA256哈希运算 不停寻找Nonce 特定的HASH 前导0的个数越多 代表难度越大 优点是难于计算 一旦收到网络上的区块 能快速验证 难度算法按高度动态调整 维持出块时间不变 POW规范
  • 06 - string,number

    06 String Number 6 01 Number 关于数字的一些特性 属性与方法 数字 0123456789 var num 10 console log num 特殊数字值 NaN 非数字 数字相关方法 全局方法 number v
  • IntelliJ Idea入门教程:如何新建项目

    下载IntelliJ IDEA 创建项目后 就可以开始添加新项目 创建目录和包 添加新类 导入资源以及通过添加更多模块扩展项目 建立新项目 创建一个新目录 在 项目 工具窗口 Alt 1 中 右键单击要在其中创建新目录的节点 然后选择 Ne
  • [588]Grafana安装及简单使用

    简介 Grafana是一个跨平台的开源的度量分析和可视化工具 可以通过将采集的数据查询然后可视化的展示 并及时通知 它主要有以下六大特点 1 展示方式 快速灵活的客户端图表 面板插件有许多不同方式的可视化指标和日志 官方库中具有丰富的仪表盘
  • python中^是什么意思

    是什么意思 输入为 x 3 x x 2 print x 在python中 符号代表按位翻转 输出为 意思就是 按位异或 可以参考如下示例 In 4 2 2 Out 4 0 In 5 1 3 Out 5 2 In 6 333 333 Out
  • 【IEEE 13 节点分配系统中的THD降低】系统的谐波分析给出了各种总线上电流和电压的谐波频谱和THD(Simulink实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Simulink仿真实现 1 概述 IEEE 13 节点分配系统中的THD
  • 安装最新版greenplum6.10时报错:依赖检测失败。(详细解决步骤)

    报错原因 最新版本的greenplum6 10一些内部工具对系统环境的依赖有要求 故直接进行rpm包安装时会报依赖缺失 如果在装服务器系统的时候选则的最小化安装 那么必然会报这个错误 greenplum5及以下版本在安装的时候是不会报这个错
  • 第二周作业

    1 运行脚本可以显示出本机的ip地址 bin bash ifconfig eth0 sed n 2p awk print 2 ifconfig eth0 提取网卡eth0的配置信息 使用 传给sed sed n 2p 输出ifconfig
  • 【nodejs进阶之旅(2)】:使用koa2+mysql 实现列表数据分页

    1 展示效果 分页 2 分页主要字段 分页主要字段包括 pageSize 每页条数 pageNum 第几页 startRow 当前开始页编号 endRow 当前结束页编号 total 总数量 主要是根据前端分页的参数 进行处理后 返回前端正
  • javamail 发送邮件

    转自 http blog csdn net jbgtwang archive 2009 06 11 4259787 aspx 今天学习了一下JavaMail javamail发送邮件确实是一个比较麻烦的问题 为了以后使用方便 自己写了段代码
  • AcWing 1230. K倍区间

    给定一个长度为 N 的数列 A1 A2 AN 如果其中一段连续的子序列 Ai Ai 1 Aj 之和是 K 的倍数 我们就称这个区间 i j 是 K 倍区间 你能求出数列中总共有多少个 K倍区间吗 输入格式 第一行包含两个整数 N 和 K 以
  • 位运算举例

    从一个整数中把从右边开始的4 7位取出来 1 a右移4位 a gt gt 4 2 设置一个低4位为1 其余为全为0的数b 0 lt lt 4 0 000000000 0 0 1111111 1 0 lt lt 4 11111 0000 0
  • CH10-HarmonyOS原子化服务

    文章目录 前言 目标 原子化服务定义 原子化服务特性 原子化服务体验 服务中心 原子化服务流转 原子化服务分享 原子化开发基础 开发总体要求 服务卡片定义 运作机制 卡片提供方主要回调函数 JS卡片语法基础 原子化服务开发进阶 卡片结构目录