0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Harmony软总线的简单使用

HiHope社区官方号 2022-04-11 15:31 次阅读

软总线是什么?

分布式软总线是手机、平板、智能穿戴、智慧屏、车机等分布式设备的通信基座,为设备之间的互联互通提供了统一的分布式通信能力。

本篇讲到的知识点:

  • 启动远程FA(Feature Ability)
  • 连接远程PA(Particle Ability),发送控制命令&远端处理数据(场景1:传递加法数据,远端计算后返回给客户端。场景2:传递数据,远端Service接收后更新远端的UI。)
  • FA跨设备迁移(可回迁)
  • 混合打包
  • 其他奇怪的知识

技术要求和环境要求:

  • 基本组件熟练使用,ServiceAbility,CommonEventManager(公共事件开发)
  • 两台HarmonyOS2.0的真机 或 DevEco Studio 2.2 Beta1(分布式vwin 器的自动开启,可同时模拟运行两台设备,且自动组网)。

获取DevEco Studio 2.2 Beta1(HUAWEI DevEco Studio -HarmonyOS应用开发官网)

Service Ability(开发-连接Service (harmonyos.com))

公共事件开发指导(开发-公共事件开发指导 (harmonyos.com)))

其他

  • 真机分布式通信要求:同一局域网内,登录相同华为账号,开启蓝牙(可行方案),这样在设定-超级终端附近我的设备即可查看到另外一台设备。
  • 分布式模拟器 会自动组网,不需要手动做其他操作。(设定的超级终端中看不出来已经组网成功)
  • 运行到真机上需要进行签名,模拟器则不需要。

代码下载

gitee HarmonySoftBusHarmonySoftBus: Harmony软总线的第一次尝试,入门使用。 (gitee.com))

github HarmonySoftBusGitHub - cl18652469346/HarmonySoftBus: SoftBus Demo)

先看下效果

0420086000105867958.20210807174414.53029436266308522659891152675604:50520809063307:2800:39151678AC564CC9F69046ABA08318652F1B95576D4DA5C5580F52DDBCA74273.gif

代码结构

image.png

  • adapter:DevicesListAdapter,用于向ListContainer控件中填充设备数据。
  • component:SelectDeviceDialog封装了设备选择弹框
  • proxy:定义了连接远程和调用远程service(PA)的接口、实现类以及代理。
  • service:RemoteService为被控制端service,供手机端远程调用。

申请权限

在entry\src\main\config.json中申请以下4个权限:

  1. ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE:用于允许监听分布式组网内的设备状态变化。
  2. ohos.permission.GET_DISTRIBUTED_DEVICE_INFO:用于允许获取分布式组网内的设备列表和设备信息
  3. ohos.permission.GET_BUNDLE_INFO:用于查询其他应用的信息。
  4. ohos.permission.DISTRIBUTED_DATASYNC:用于允许不同设备间的数据交换。

此外,还需要在实现Ability的代码中显式声明需要使用多设备协同访问的权限,示例代码如下:

image.png

获取组网内在线的其他设备DeviceInfo(Id&Name)

0420086000105867958.20210807114754.59439119649863074192410773684133:50520809063307:2800:7DF9B97018141F509FC36F936E66FEFFC4D2F1F26E7A87D46A7BF827A3ED53BF.png

获取自身设备的Id

image.png

启动远程FA

image.png

和普通画面的启动类似,withDeviceId("") 为本地画面跳转。

跨设备启动需要携带 远程设备的DeviceID,以及设置 "支持分布式调度系统中的多设备启动"Flag。

连接远程PA,发送控制命令&远端处理数据

第一步: 客户端创建远程连接代理类

public class MyRemoteProxy implements IRemoteBroker { /** * 远端响应成功的标识 */ public static final int ERR_OK = 0; private static final String TAG = MyRemoteProxy.class.getSimpleName(); private final IRemoteObject remote; public MyRemoteProxy(IRemoteObject remote) { this.remote = remote; } @Override public IRemoteObject asObject() { return remote; } // 携带数据向远端Sevice发送请求 public int senDataToRemote(int requestType, Map paramMap) { MessageParcel data = MessageParcel.obtain(); MessageParcel reply = MessageParcel.obtain(); MessageOption option = new MessageOption(MessageOption.TF_SYNC); int ec = 1; int result = -1; try { if (paramMap.get("inputString") instanceof String) { String inputString = (String) paramMap.get("inputString"); data.writeInt(requestType); data.writeString(inputString); remote.sendRequest(requestType, data, reply, option); } ec = reply.readInt(); if (ec != ERR_OK) { LogUtils.error(TAG, "RemoteException:"); } else { if (requestType == ConnectManagerIml.REQUEST_PLUS) { result = reply.readInt(); // 返回成功后拿到远端计算的结果。 } } } catch (RemoteException e) { LogUtils.error(TAG, "RemoteException:"); } finally { ec = ERR_OK; if (result != -1) { ec = result; } data.reclaim(); reply.reclaim(); } return ec; } }

  • 实现IRemoteBroker接口,asObject返回远程RemoteObject对象
  • 创建构造方法(参数为connectAbility成功时回调方法onAbilityConnectDone中的远程操作对象)
  • 封装向远端发送请求的方法,便于后续进行控制 (本例中是简单的加法请求)

image.png

MessageOption.TF_SYNC代表同步,意味着会在sendRequest时阻塞等待来自远端Service的返回。

远端Service返回值是 reply,reply.readInt() 默认会返回0,代表请求成功。若是想携带其他返回值,需要在远端Service中进行处理,下一步会讲到。

第二步: 远端Service中,创建RemoteObject并处理请求

public class MyRemote extends RemoteObject implements IRemoteBroker { private MyRemote() { super("===MyService_Remote"); } @Override public IRemoteObject asObject() { return this; } @Override public boolean onRemoteRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option) { LogUtils.info(TAG, "===onRemoteRequest......"); int requestType = data.readInt(); String inputString = ""; if (code == REQUEST_SEND_DATA) { inputString = data.readString(); publishInput(requestType, inputString); } else if (code == REQUEST_PLUS) { int a = data.readInt(); int b = data.readInt(); reply.writeInt(ERR_OK); reply.writeInt(a + b); publishPlusResult(requestType, String.valueOf(a + b)); } return true; } }@Override protected IRemoteObject onConnect(Intent intent) { super.onConnect(intent); return remote.asObject(); }

onRemoteRequest 接收来自 sendRequest(requestType, data, reply, option); 传递过来的请求类型,数据,返回值,请求类型。

一般不需要处理reply,客户端reply.readInt() 也会拿到0(表示请求成功),若是需要在远端接收到请求后,需要额外返回数据给客户端,则需要进行write操作。

第三步: 连接远端Service

image.png

重点都标记了下,这块没啥好讲的,ServiceAbility的基本连接操作。

第四步: 发送命令,远端Service处理数据(返回数据、更新UI)

场景1:传递加法数据,远端计算后返回给客户端

image.png

场景2:传递数据,远端Service接收后更新远端的UI

image.png

远端Service在onRemoteRequest中处理更新UI的请求,远端利用公共事件,进行UI的更新。(意味着也就可以 控制音乐的播放,暂停 等等)

image.png

FA跨设备迁移(可回迁)

跨端迁移开发指导专题-跨端迁移开发指导 (harmonyos.com)) 目的: 实现正在编辑的页面,流转的另外一台设备,利用分布式的能力提高用户的体验。

步骤一

想要迁移的Ability以及其下所有的AbilitySlice都必须需要实现一个接口:IAbilityContinuation

坑点1:哪怕你知识想将Ability其中一个Slice进行迁移,也必须将Ability的所有的slice都要实现该接口

image.png

onStartContinuationFA请求迁移后,系统首先回调此方法,开发者可以在此回调中决策当前是否可以执行迁移,比如,弹框让用户确认是否开始迁移。

onSaveData(IntentParams saveData)如果onStartContinuation()返回true,则系统回调此方法,开发者在此回调中保存必须传递到目标端设备上,用于恢复FA状态的数据。

onRestoreData(IntentParams restoreData)发起端设备上FA完成保存数据后,系统在目标端设备上回调此方法,开发者在此回调中接受用于恢复FA状态的数据。

onCompleteContinuation(int result) 目标端设备上恢复数据一旦完成,系统就会在发起端设备上回调FA的此方法,以便通知应用迁移流程已结束。

坑点2: 不要忘记 return true; Ability中也要。

坑点3: onRestoreData进行UI的恢复时,需要切换到UI线程,否则...(没报错Log)

步骤二

可回迁的迁移

image.png

回迁(若是已经回迁了,再进行回迁,会报错。 先try-catch了)

image.png

混合打包

目前OpenHarmony上的应用有以下三种

  • 直接运行的 安卓应用
  • 使用DevEco Studio编写的OpenHarmony应用
  • 已有开发好的 安卓应用,想拥有 OpenHarmony的一些特性,从而进行混合打包。apk逻辑无需变化,即可拥有OpenHarmony特性,例如服务卡片(专题-Java卡片开发指导 (harmonyos.com)))。

如何进行混合打包?

篇幅原因,将会在另外一篇中详细介绍。 请移步:安卓应用如何混合打包拥有OpenHarmony的卡片服务?(安卓应用如何混合打包拥有OpenHarmony特性? (huawei.com)))

奇怪的知识

针对:分布式数据服务开发指导(开发-分布式数据服务开发指导 (harmonyos.com))

设计字段:

单版本分布式数据库的介绍比较简单。存储key-value, value若是复杂点没介绍。若想value中存储很多其他数据,可进行以下操作。

image.png

以上时创建单版本分布式数据库时,设置Schema对象,从而设计了数据库中的字段。

数据存储:

image.png

存入的时候,需要以json的格式进行写入。

查询:

image.png

坑点: 下次查询时,需要query.reset();

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 分布式
    +关注

    关注

    1

    文章

    814

    浏览量

    74367
收藏 人收藏

    评论

    相关推荐

    openharmony照明开关应用介绍

    最近几年,智能家居成为了人们日常生活中的热门话题。其中,智能照明系统作为智能家居的重要组成部分之一,正在迅速流行起来。而今天我将为大家详细介绍一款智能照明系统中的开关——open harmony照明
    的头像 发表于01-05 17:00 881次阅读

    什么是APB协议/总线?APB总线入门

    上一篇文章 简单讲解了什么是AMBA 总线简单来说,AMBA 总线是一系列协议。定义了适用于不同场景的 总线家族。今天我们就来将AMBA
    的头像 发表于01-02 11:37 2660次阅读
    什么是APB协议/<b class='flag-5'>总线</b>?APB<b class='flag-5'>总线</b>入门

    CanEasy多场景应用,让汽车总线测试更简单

    CanEasy是一个基于Windows的 总线工具,用于分析和测试CAN、CAN FD和LIN以及汽车以太网系统。通过高度自动化和 简单的配置模拟 总线流量,CanEasy可用于分析真实网络、模拟虚拟系统
    的头像 发表于12-11 09:46 911次阅读
    CanEasy多场景应用,让汽车<b class='flag-5'>总线</b>测试更<b class='flag-5'>简单</b>

    COB封装的主要作用是什么?COB封装可以运用在哪些场合?

    COB 封装的主要作用是什么?COB 封装可以运用在哪些场合? COB(Chip on Board) 封装是将芯片直接贴片焊接在PCB板上的封装技术。它是一种高密度集成电路封装技术,具有电路
    的头像 发表于10-22 15:08 832次阅读

    什么是开关?LLC电路是如何实现开关的?

    什么是 开关?LLC电路是如何实现 开关的? 随着现代电子技术的不断进步和发展, 开关作为一种新型电力转换技术,正在逐渐取代传统硬开关技术,成为未来电力转换的主流方向。 开关技术可以有
    的头像 发表于10-22 12:20 2209次阅读

    使用MPLABHarmonyUSB设备协议栈创建多LUN USB海量存储类设备

    德赢Vwin官网 网站提供《使用MPLAB HarmonyUSB设备协议栈创建多LUN USB海量存储类设备.pdf》资料免费下载
    发表于09-25 11:00 0次下载
    使用MPLAB <b class='flag-5'>Harmony</b> USB设备协议栈创建多LUN USB海量存储类设备

    MPLABHarmony应用程序帮助

    德赢Vwin官网 网站提供《MPLAB Harmony应用程序帮助.pdf》资料免费下载
    发表于09-25 09:50 0次下载
    MPLAB <b class='flag-5'>Harmony</b>应用程序帮助

    使用MPLABHarmony在PIC32 MCU上创建USB音频设备

    德赢Vwin官网 网站提供《使用MPLAB Harmony在PIC32 MCU上创建USB音频设备.pdf》资料免费下载
    发表于09-25 09:30 0次下载
    使用MPLAB <b class='flag-5'>Harmony</b>在PIC32 MCU上创建USB音频设备

    使用MPLABHarmonyv3的MPLABHarmony配置器在PIC32单片机上创建Hello World应用程序

    德赢Vwin官网 网站提供《使用MPLAB Harmonyv3的MPLAB Harmony配置器在PIC32单片机上创建Hello World应用程序.pdf》资料免费下载
    发表于09-20 14:52 1次下载
    使用MPLAB <b class='flag-5'>Harmony</b> v3的MPLAB <b class='flag-5'>Harmony</b>配置器在PIC32单片机上创建Hello World应用程序

    通过MPLABHarmonyv3将XDMAC与Arm Cortex-M7 MCU上的QSPI搭配使用

    德赢Vwin官网 网站提供《通过MPLAB Harmonyv3将XDMAC与Arm Cortex-M7 MCU上的QSPI搭配使用.pdf》资料免费下载
    发表于09-20 14:51 0次下载
    通过MPLAB <b class='flag-5'>Harmony</b> v3将XDMAC与Arm Cortex-M7 MCU上的QSPI搭配使用

    使用MPLABHarmony配置器(MHC)在SAM单片机上创建Hello World应用程序

    德赢Vwin官网 网站提供《使用MPLAB Harmony配置器(MHC)在SAM单片机上创建Hello World应用程序.pdf》资料免费下载
    发表于09-20 10:58 1次下载
    使用MPLAB <b class='flag-5'>Harmony</b>配置器(MHC)在SAM单片机上创建Hello World应用程序

    利用MPLABHarmonyv3实时更新PIC32MZ MCU上的应用程序

    德赢Vwin官网 网站提供《利用MPLAB Harmonyv3实时更新PIC32MZ MCU上的应用程序.pdf》资料免费下载
    发表于09-19 17:02 0次下载
    利用MPLAB <b class='flag-5'>Harmony</b> v3实时更新PIC32MZ MCU上的应用程序

    MPLABHarmonyv3 PLIB和驱动程序的区别及其何时使用

    德赢Vwin官网 网站提供《MPLAB Harmonyv3 PLIB和驱动程序的区别及其何时使用.pdf》资料免费下载
    发表于09-19 17:01 0次下载
    MPLAB <b class='flag-5'>Harmony</b> v3 PLIB和驱动程序的区别及其何时使用

    利用MPLABHarmonyv3实时更新SAM E54 MCU上的应用程序

    德赢Vwin官网 网站提供《利用MPLAB Harmonyv3实时更新SAM E54 MCU上的应用程序.pdf》资料免费下载
    发表于09-19 16:39 0次下载
    利用MPLAB <b class='flag-5'>Harmony</b> v3实时更新SAM E54 MCU上的应用程序

    HarmonyOS 4发布通动力全力拥抱新Harmony生态

    8月4日—6日,华为开发者大会2023(Together)在东莞松山湖举行。本次大会上,华为HarmonyOS4正式亮相。作为华为重要的合作伙伴, 通动力携旗下子公司鸿湖万联、 通教育应邀出席了本次大会,并通过多场主题演讲、四大展区成果展示、HarmonyOS极客马拉松大
    的头像 发表于09-05 10:22 1260次阅读
    HarmonyOS 4发布 <b class='flag-5'>软</b>通动力全力拥抱新<b class='flag-5'>Harmony</b>生态