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

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

3天内不再提示

软总线是什么 剖析鸿蒙软总线超详细教程

华为麒麟 来源:鸿蒙威廉希尔官方网站 社区 作者:润和软件HiHope 2021-08-27 11:13 次阅读

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

本篇讲到的知识点:

启动远程 FA(Feature Ability)

连接远程 PA(Particle Ability),发送控制命令&远端处理数据(场景 1:传递加法数据,远端计算后返回给客户端。场景 2:传递数据,远端 Service 接收后更新远端的 UI。)

FA 跨设备迁移(可回迁)

混合打包

其他奇怪的知识

威廉希尔官方网站 要求和环境要求:

基本组件熟练使用,ServiceAbility,CommonEventManager(公共事件开发)

两台 HarmonyOS 2.0 的真机 或 DevEco Studio 2.2 Beta1(分布式interwetten与威廉的赔率体系 器的自动开启,可同时模拟运行两台设备,且自动组网)。

获取 DevEco Studio 2.2 Beta1:

https://developer.harmonyos.com/cn/develop/deveco-studio?utm_source=product&utm_medium=link&utm_campaign=DS&utm_content=2.1#download_beta

Service Ability:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-service-connecting-0000000000044469

公共事件开发指导:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-notification-fwk-common-event-0000000000029871

其他:

真机分布式通信要求:同一局域网内,登录相同华为账号,开启蓝牙(可行方案),这样在设定-超级终端中附近我的设备即可查看到另外一台设备。

分布式模拟器会自动组网,不需要手动做其他操作。(设定的超级终端中看不出来已经组网成功)

运行到真机上需要进行签名,模拟器则不需要。

代码下载

gitee HarmonySoftBus:

https://gitee.com/shmily_cl/HarmonySoftBus

github HarmonySoftBus:

https://github.com/cl18652469346/HarmonySoftBus

代码结构:

adapter:DevicesListAdapter,用于向 ListContainer 控件中填充设备数据。

component:SelectDeviceDialog 封装了设备选择弹框。

proxy:定义了连接远程和调用远程 service(PA)的接口、实现类以及代理。

service:RemoteService 为被控制端 service,供手机端远程调用。

申请权限

在 entrysrcmainconfig.json 中申请以下 4 个权限:

ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE:用于允许监听分布式组网内的设备状态变化。

ohos.permission.GET_DISTRIBUTED_DEVICE_INFO:用于允许获取分布式组网内的设备列表和设备信息

ohos.permission.GET_BUNDLE_INFO:用于查询其他应用的信息。

ohos.permission.DISTRIBUTED_DATASYNC:用于允许不同设备间的数据交换。

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

d76c9d46-00ee-11ec-9bcf-12bb97331649.png

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

获取自身设备的 Id:

d81adcee-00ee-11ec-9bcf-12bb97331649.png

启动远程 FA:

和普通画面的启动类似,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 中的远程操作对象)。

③封装向远端发送请求的方法,便于后续进行控制(本例中是简单的加法请求)。

d87da608-00ee-11ec-9bcf-12bb97331649.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;

}

}

@Overrideprotected IRemoteObject onConnect(Intent intent) {

super.onConnect(intent);

return remote.asObject();

}

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

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

第三步:连接远端 Service

代码如下图:

d8a30600-00ee-11ec-9bcf-12bb97331649.png

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

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

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

da01ebd8-00ee-11ec-9bcf-12bb97331649.png

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

da8d6a82-00ee-11ec-9bcf-12bb97331649.png

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

dab68322-00ee-11ec-9bcf-12bb97331649.png

FA 跨设备迁移(可回迁)

跨端迁移开发指导:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/hop-cross-device-migration-guidelines-0000001146058939

目的:实现正在编辑的页面,流转的另外一台设备,利用分布式的能力提高用户的体验。

步骤一

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

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

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

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

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

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

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

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

步骤二

可回迁的迁移:

db9260fe-00ee-11ec-9bcf-12bb97331649.png

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

dbe903c8-00ee-11ec-9bcf-12bb97331649.png

混合打包

目前鸿蒙上的应用有以下三种:

直接运行的安卓应用。

使用 DevEco Studio 编写的鸿蒙应用。

已有开发好的安卓应用,想拥有鸿蒙的一些特性,从而进行混合打包。apk 逻辑无需变化,即可拥有鸿蒙特性,例如服务卡片。

如何进行混合打包?篇幅原因,将会在另外一篇中详细介绍。请移步:安卓应用如何混合打包拥有鸿蒙的卡片服务?

https://developer.huawei.com/consumer/cn/blog/topic/03637432111020021

奇怪的知识

针对:分布式数据服务开发指导。

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/database-mdds-guidelines-0000001113961404

①设计字段

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

dc018dee-00ee-11ec-9bcf-12bb97331649.png

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

②数据存储

dc2e3254-00ee-11ec-9bcf-12bb97331649.png

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

③查询

dc549cdc-00ee-11ec-9bcf-12bb97331649.png

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

编辑:jq

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

    关注

    10

    文章

    2881

    浏览量

    88086
  • 分布式
    +关注

    关注

    1

    文章

    899

    浏览量

    74509
  • 代码
    +关注

    关注

    30

    文章

    4788

    浏览量

    68613
  • 模拟器
    +关注

    关注

    2

    文章

    875

    浏览量

    43224
  • 鸿蒙
    +关注

    关注

    57

    文章

    2352

    浏览量

    42859
  • HiHope
    +关注

    关注

    0

    文章

    63

    浏览量

    3542

原文标题:鸿蒙软总线,超详细教程来啦!

文章出处:【微信号:Huawei_Kirin,微信公众号:华为麒麟】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    国际荣获鸿蒙生态开发服务商卓越奖

    近日,2024年鸿蒙生态型服务商年终总结会议在云南昆明盛大召开,中国际应邀出席,与上百家开发服务商、培训服务商及鸿蒙生态行业伙伴齐聚一堂,共同分享HarmonyOS行业解决方案的创新实践,探讨企业
    的头像 发表于 12-27 16:35 109次阅读

    通动力出席原生鸿蒙使能徐州专场推介会

    近日,由通动力、鸿蒙生态服务(深圳)有限公司、徐州报业传媒集团联合华为开发者联盟举办的“鸿蒙启智·汉韵徐州:原生鸿蒙使能徐州专场推介会”隆重召开。会上,
    的头像 发表于 12-10 09:42 211次阅读

    通动力携子公司鸿湖万联、通教育助阵首届鸿蒙生态大会成功举办

    11月23日·中国深圳,首届鸿蒙生态大会上,通动力及通动力子公司鸿湖万联作为全球智慧物联网联盟(GIIC)理事单位、鸿蒙生态服务(深圳)有限公司战略合作伙伴,联合
    的头像 发表于 11-29 10:25 185次阅读
    <b class='flag-5'>软</b>通动力携子公司鸿湖万联、<b class='flag-5'>软</b>通教育助阵首届<b class='flag-5'>鸿蒙</b>生态大会成功举办

    国际携手深开鸿亮相首届鸿蒙生态大会

    近日,由鸿蒙生态服务(深圳)有限公司承办的全球智慧物联网联盟(GIIC)第二次会员大会暨“新生态·新机遇”鸿蒙生态大会在深圳盛大召开,中国际科技服务有限公司(简称“中国际”)携手深
    的头像 发表于 11-26 14:16 235次阅读

    通动力为鸿蒙生态大步向前注入了新动能

    近日,首届鸿蒙生态大会上,通动力及子公司鸿湖万联作为全球智慧物联网联盟(GIIC)理事单位、鸿蒙生态服务(深圳)有限公司战略合作伙伴,联合通教育深度参与了大会多项重磅活动。此次盛会
    的头像 发表于 11-24 11:16 482次阅读

    通动力荣获华为鸿蒙生态“行业解决方案创新奖”

    突出贡献的伙伴进行表彰。通动力联合北医三院共同打造的鸿蒙原生应用健康医疗解决方案“智康汇”荣获华为鸿蒙生态“行业解决方案创新奖”,这是通动力继大唐芙蓉园项目后再次获得此奖项。
    的头像 发表于 10-10 10:47 759次阅读

    通动力子公司鸿湖万联重磅发布SwanLinkOS 5,擘画开源鸿蒙AI PC新篇章

    在刚刚落下帷幕的首届H•I³AI探索峰会上,通动力再次于鸿蒙生态领域实现突破。此次活动中,通动力高级副总裁、鸿湖万联总经理秦张波发布SwanLinkOS5(天鸿操作系统),并联合
    的头像 发表于 09-03 11:37 562次阅读
    <b class='flag-5'>软</b>通动力子公司鸿湖万联重磅发布SwanLinkOS 5,擘画开源<b class='flag-5'>鸿蒙</b>AI PC新篇章

    云动鸿蒙计划 通动力携手华为云及伙伴共扬鸿蒙千帆

    北京2024年6月6日 /美通社/ -- 为进一步加强鸿蒙生态建设,推动鸿蒙操作系统创新发展,5月31日,通动力联合华为云在西安举办2024鸿蒙协同峰会。
    的头像 发表于 06-07 10:59 474次阅读
    云动<b class='flag-5'>鸿蒙</b>计划 <b class='flag-5'>软</b>通动力携手华为云及伙伴共扬<b class='flag-5'>鸿蒙</b>千帆

    通动力荣膺首批“鸿蒙原生应用开发及培训钻石服务商”

    近日,鸿蒙原生应用合作交流推介会在深圳成功召开。在此次盛会上,通动力脱颖而出,成为鸿蒙生态的首批认证合作伙伴,并荣获“鸿蒙原生应用开发及培训钻石服务商”的殊荣。
    的头像 发表于 05-22 10:53 747次阅读

    “中国际移动应用鸿蒙化专家服务”联营商品正式上架华为云云商店

    近日,中国际联合华为云推出的“中国际移动应用鸿蒙化专家服务”正式上线华为云云商店,成为华为云联营商品。
    的头像 发表于 05-20 11:21 560次阅读
    “中<b class='flag-5'>软</b>国际移动应用<b class='flag-5'>鸿蒙</b>化专家服务”联营商品正式上架华为云云商店

    国际与河南协企业家共同探讨鸿蒙生态新未来

    近日,河南协企业家交流会——“鸿蒙千帆启航 创新提质生产”主题活动在郑州举行
    的头像 发表于 05-08 09:24 483次阅读

    国际鸿蒙化接入服务,助力产业智能化升级

    4月21日,中国际受邀参加在北京举办的HCDG城市行·北京站活动-鸿蒙生态专场,本次活动由HCDG(Huawei Cloud Developer Group 华为云开发者社区组织)主办,邀请了多位华为云生态及鸿蒙生态威廉希尔官方网站 专家分
    的头像 发表于 04-24 09:50 449次阅读

    通动力联合华为云推出鸿蒙应用联营商品

    近日,通动力与华为云推出的联营商品“通动力鸿蒙应用及元服务定制开发服务”正式入驻华为云云商店,通动力成为在华为鸿蒙应用生态认证服务商中
    的头像 发表于 03-26 09:30 504次阅读
    <b class='flag-5'>软</b>通动力联合华为云推出<b class='flag-5'>鸿蒙</b>应用联营商品

    通动力与鸿蒙生态服务双方将共同聚焦鸿蒙原生应用开发和培训领域

    3月8日,通动力与鸿蒙生态服务(深圳)有限公司(以下简称“鸿蒙生态服务公司”)签署合作协议,双方将共同聚焦鸿蒙原生应用开发和培训领域
    的头像 发表于 03-14 09:54 508次阅读

    通动力荣获“鸿蒙智联卓越解决方案伙伴”

    Connect Partner,通动力受邀参会,并与华为签订了鸿蒙智联生态解决方案合作伙伴协议,进一步深化了双方在鸿蒙生态领域的合作。
    的头像 发表于 03-14 09:37 414次阅读