0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

軟總線是什么 剖析鴻蒙軟總線超詳細(xì)教程

華為麒麟 ? 來源:鴻蒙技術(shù)社區(qū) ? 作者:潤和軟件HiHope ? 2021-08-27 11:13 ? 次閱讀

軟總線是什么?分布式軟總線是手機(jī)、平板、智能穿戴、智慧屏、車機(jī)等分布式設(shè)備的通信基座,為設(shè)備之間的互聯(lián)互通提供了統(tǒng)一的分布式通信能力。

本篇講到的知識點:

啟動遠(yuǎn)程 FA(Feature Ability)

連接遠(yuǎn)程 PA(Particle Ability),發(fā)送控制命令&遠(yuǎn)端處理數(shù)據(jù)(場景 1:傳遞加法數(shù)據(jù),遠(yuǎn)端計算后返回給客戶端。場景 2:傳遞數(shù)據(jù),遠(yuǎn)端 Service 接收后更新遠(yuǎn)端的 UI。)

FA 跨設(shè)備遷移(可回遷)

混合打包

其他奇怪的知識

技術(shù)要求和環(huán)境要求:

基本組件熟練使用,ServiceAbility,CommonEventManager(公共事件開發(fā))

兩臺 HarmonyOS 2.0 的真機(jī) 或 DevEco Studio 2.2 Beta1(分布式模擬器的自動開啟,可同時模擬運(yùn)行兩臺設(shè)備,且自動組網(wǎng))。

獲取 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

公共事件開發(fā)指導(dǎo):

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

其他:

真機(jī)分布式通信要求:同一局域網(wǎng)內(nèi),登錄相同華為賬號,開啟藍(lán)牙(可行方案),這樣在設(shè)定-超級終端中附近我的設(shè)備即可查看到另外一臺設(shè)備。

分布式模擬器會自動組網(wǎng),不需要手動做其他操作。(設(shè)定的超級終端中看不出來已經(jīng)組網(wǎng)成功)

運(yùn)行到真機(jī)上需要進(jìn)行簽名,模擬器則不需要。

代碼下載

gitee HarmonySoftBus:

https://gitee.com/shmily_cl/HarmonySoftBus

github HarmonySoftBus:

https://github.com/cl18652469346/HarmonySoftBus

代碼結(jié)構(gòu):

adapter:DevicesListAdapter,用于向 ListContainer 控件中填充設(shè)備數(shù)據(jù)。

component:SelectDeviceDialog 封裝了設(shè)備選擇彈框。

proxy:定義了連接遠(yuǎn)程和調(diào)用遠(yuǎn)程 service(PA)的接口、實現(xiàn)類以及代理。

service:RemoteService 為被控制端 service,供手機(jī)端遠(yuǎn)程調(diào)用。

申請權(quán)限

在 entrysrcmainconfig.json 中申請以下 4 個權(quán)限:

ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE:用于允許監(jiān)聽分布式組網(wǎng)內(nèi)的設(shè)備狀態(tài)變化。

ohos.permission.GET_DISTRIBUTED_DEVICE_INFO:用于允許獲取分布式組網(wǎng)內(nèi)的設(shè)備列表和設(shè)備信息。

ohos.permission.GET_BUNDLE_INFO:用于查詢其他應(yīng)用的信息。

ohos.permission.DISTRIBUTED_DATASYNC:用于允許不同設(shè)備間的數(shù)據(jù)交換。

此外,還需要在實現(xiàn) Ability 的代碼中顯式聲明需要使用多設(shè)備協(xié)同訪問的權(quán)限,示例代碼如下:

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

獲取組網(wǎng)內(nèi)在線的其他設(shè)備 DeviceInfo(Id&Name):

獲取自身設(shè)備的 Id:

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

啟動遠(yuǎn)程 FA:

和普通畫面的啟動類似,withDeviceId(“”) 為本地畫面跳轉(zhuǎn)。

跨設(shè)備啟動需要攜帶遠(yuǎn)程設(shè)備的 DeviceID,以及設(shè)置 “支持分布式調(diào)度系統(tǒng)中的多設(shè)備啟動”Flag。

連接遠(yuǎn)程 PA,發(fā)送控制命令&遠(yuǎn)端處理數(shù)據(jù)

第一步:客戶端創(chuàng)建遠(yuǎn)程連接代理類

代碼如下:

public class MyRemoteProxy implements IRemoteBroker {

/**

* 遠(yuǎn)端響應(yīng)成功的標(biāo)識

*/

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;

}

// 攜帶數(shù)據(jù)向遠(yuǎn)端Sevice發(fā)送請求

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(); // 返回成功后拿到遠(yuǎn)端計算的結(jié)果。

}

}

} catch (RemoteException e) {

LogUtils.error(TAG, “RemoteException:”);

} finally {

ec = ERR_OK;

if (result != -1) {

ec = result;

}

data.reclaim();

reply.reclaim();

}

return ec;

}

}

①實現(xiàn) IRemoteBroker 接口,asObject 返回遠(yuǎn)程 RemoteObject 對象。

②創(chuàng)建構(gòu)造方法(參數(shù)為 connectAbility 成功時回調(diào)方法 onAbilityConnectDone 中的遠(yuǎn)程操作對象)。

③封裝向遠(yuǎn)端發(fā)送請求的方法,便于后續(xù)進(jìn)行控制(本例中是簡單的加法請求)。

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

MessageOption.TF_SYNC 代表同步,意味著會在 sendRequest 時阻塞等待來自遠(yuǎn)端 Service 的返回。

遠(yuǎn)端 Service 返回值是 reply,reply.readInt() 默認(rèn)會返回 0,代表請求成功。若是想攜帶其他返回值,需要在遠(yuǎn)端 Service 中進(jìn)行處理,下一步會講到。

第二步:遠(yuǎn)端 Service 中,創(chuàng)建 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);傳遞過來的請求類型,數(shù)據(jù),返回值,請求類型。

一般不需要處理 reply,客戶端 reply.readInt() 也會拿到 0(表示請求成功),若是需要在遠(yuǎn)端接收到請求后,需要額外返回數(shù)據(jù)給客戶端,則需要進(jìn)行 write 操作。

第三步:連接遠(yuǎn)端 Service

代碼如下圖:

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

重點都標(biāo)記了下,這塊沒啥好講的,ServiceAbility 的基本連接操作。

第四步:發(fā)送命令,遠(yuǎn)端 Service 處理數(shù)據(jù)(返回數(shù)據(jù)、更新 UI)

場景 1:傳遞加法數(shù)據(jù),遠(yuǎn)端計算后返回給客戶端。

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

場景 2:傳遞數(shù)據(jù),遠(yuǎn)端 Service 接收后更新遠(yuǎn)端的 UI。

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

遠(yuǎn)端 Service 在 onRemoteRequest 中處理更新 UI 的請求,遠(yuǎn)端利用公共事件,進(jìn)行 UI 的更新。(意味著也就可以控制音樂的播放,暫停等等)

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

FA 跨設(shè)備遷移(可回遷)

跨端遷移開發(fā)指導(dǎo):

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

目的:實現(xiàn)正在編輯的頁面,流轉(zhuǎn)的另外一臺設(shè)備,利用分布式的能力提高用戶的體驗。

步驟一

想要遷移的 Ability 以及其下所有的 AbilitySlice 都必須需要實現(xiàn)一個接口:IAbilityContinuation。

坑點 1:哪怕你知識想將 Ability 其中一個 Slice 進(jìn)行遷移,也必須將 Ability 的所有的 slice 都要實現(xiàn)該接口。

onStartContinuation FA 請求遷移后,系統(tǒng)首先回調(diào)此方法,開發(fā)者可以在此回調(diào)中決策當(dāng)前是否可以執(zhí)行遷移,比如,彈框讓用戶確認(rèn)是否開始遷移。

onSaveData(IntentParams saveData)如果 onStartContinuation() 返回 true,則系統(tǒng)回調(diào)此方法,開發(fā)者在此回調(diào)中保存必須傳遞到目標(biāo)端設(shè)備上,用于恢復(fù) FA 狀態(tài)的數(shù)據(jù)。

onRestoreData(IntentParams restoreData)發(fā)起端設(shè)備上 FA 完成保存數(shù)據(jù)后,系統(tǒng)在目標(biāo)端設(shè)備上回調(diào)此方法,開發(fā)者在此回調(diào)中接受用于恢復(fù) FA 狀態(tài)的數(shù)據(jù)。

onCompleteContinuation(int result)目標(biāo)端設(shè)備上恢復(fù)數(shù)據(jù)一旦完成,系統(tǒng)就會在發(fā)起端設(shè)備上回調(diào) FA 的此方法,以便通知應(yīng)用遷移流程已結(jié)束。

坑點 2:不要忘記 return true;Ability 中也要。

坑點 3:onRestoreData 進(jìn)行 UI 的恢復(fù)時,需要切換到 UI 線程,否則。。。(沒報錯 Log)

步驟二

可回遷的遷移:

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

回遷(若是已經(jīng)回遷了,再進(jìn)行回遷,會報錯。先 try-catch 了):

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

混合打包

目前鴻蒙上的應(yīng)用有以下三種:

直接運(yùn)行的安卓應(yīng)用。

使用 DevEco Studio 編寫的鴻蒙應(yīng)用。

已有開發(fā)好的安卓應(yīng)用,想擁有鴻蒙的一些特性,從而進(jìn)行混合打包。apk 邏輯無需變化,即可擁有鴻蒙特性,例如服務(wù)卡片。

如何進(jìn)行混合打包?篇幅原因,將會在另外一篇中詳細(xì)介紹。請移步:安卓應(yīng)用如何混合打包擁有鴻蒙的卡片服務(wù)?

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

奇怪的知識

針對:分布式數(shù)據(jù)服務(wù)開發(fā)指導(dǎo)。

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

①設(shè)計字段

單版本分布式數(shù)據(jù)庫的介紹比較簡單。存儲 key-value,value 若是復(fù)雜點沒介紹。若想 value 中存儲很多其他數(shù)據(jù),可進(jìn)行以下操作。

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

以上時創(chuàng)建單版本分布式數(shù)據(jù)庫時,設(shè)置 Schema 對象,從而設(shè)計了數(shù)據(jù)庫中的字段。

②數(shù)據(jù)存儲

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

存入的時候,需要以 json 的格式進(jìn)行寫入。

③查詢

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

坑點:下次查詢時,需要 query.reset();

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 總線
    +關(guān)注

    關(guān)注

    10

    文章

    2849

    瀏覽量

    87842
  • 分布式
    +關(guān)注

    關(guān)注

    1

    文章

    843

    瀏覽量

    74422
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4697

    瀏覽量

    68085
  • 模擬器
    +關(guān)注

    關(guān)注

    2

    文章

    862

    瀏覽量

    43087
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2291

    瀏覽量

    42632
  • HiHope
    +關(guān)注

    關(guān)注

    0

    文章

    63

    瀏覽量

    3518

原文標(biāo)題:鴻蒙軟總線,超詳細(xì)教程來啦!

文章出處:【微信號:Huawei_Kirin,微信公眾號:華為麒麟】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    通動力榮獲華為鴻蒙生態(tài)“行業(yè)解決方案創(chuàng)新獎”

    突出貢獻(xiàn)的伙伴進(jìn)行表彰。通動力聯(lián)合北醫(yī)三院共同打造的鴻蒙原生應(yīng)用健康醫(yī)療解決方案“智康匯”榮獲華為鴻蒙生態(tài)“行業(yè)解決方案創(chuàng)新獎”,這是通動力繼大唐芙蓉園項目后再次獲得此獎項。
    的頭像 發(fā)表于 10-10 10:47 ?414次閱讀

    通動力子公司鴻湖萬聯(lián)重磅發(fā)布SwanLinkOS 5,擘畫開源鴻蒙AI PC新篇章

    在剛剛落下帷幕的首屆H?I3AI探索峰會上,通動力再次于鴻蒙生態(tài)領(lǐng)域?qū)崿F(xiàn)突破。此次活動中,通動力高級副總裁、鴻湖萬聯(lián)總經(jīng)理秦張波發(fā)布SwanLinkOS5(天鴻操作系統(tǒng)),并聯(lián)合
    的頭像 發(fā)表于 09-03 11:37 ?426次閱讀
    <b class='flag-5'>軟</b>通動力子公司鴻湖萬聯(lián)重磅發(fā)布SwanLinkOS 5,擘畫開源<b class='flag-5'>鴻蒙</b>AI PC新篇章

    云動鴻蒙計劃 通動力攜手華為云及伙伴共揚(yáng)鴻蒙千帆

    北京2024年6月6日?/美通社/ -- 為進(jìn)一步加強(qiáng)鴻蒙生態(tài)建設(shè),推動鴻蒙操作系統(tǒng)創(chuàng)新發(fā)展,5月31日,通動力聯(lián)合華為云在西安舉辦2024鴻蒙協(xié)同峰會。
    的頭像 發(fā)表于 06-07 10:59 ?408次閱讀
    云動<b class='flag-5'>鴻蒙</b>計劃 <b class='flag-5'>軟</b>通動力攜手華為云及伙伴共揚(yáng)<b class='flag-5'>鴻蒙</b>千帆

    通動力榮膺首批“鴻蒙原生應(yīng)用開發(fā)及培訓(xùn)鉆石服務(wù)商”

    近日,鴻蒙原生應(yīng)用合作交流推介會在深圳成功召開。在此次盛會上,通動力脫穎而出,成為鴻蒙生態(tài)的首批認(rèn)證合作伙伴,并榮獲“鴻蒙原生應(yīng)用開發(fā)及培訓(xùn)鉆石服務(wù)商”的殊榮。
    的頭像 發(fā)表于 05-22 10:53 ?670次閱讀

    “中國際移動應(yīng)用鴻蒙化專家服務(wù)”聯(lián)營商品正式上架華為云云商店

    近日,中國際聯(lián)合華為云推出的“中國際移動應(yīng)用鴻蒙化專家服務(wù)”正式上線華為云云商店,成為華為云聯(lián)營商品。
    的頭像 發(fā)表于 05-20 11:21 ?448次閱讀
    “中<b class='flag-5'>軟</b>國際移動應(yīng)用<b class='flag-5'>鴻蒙</b>化專家服務(wù)”聯(lián)營商品正式上架華為云云商店

    國際與河南協(xié)企業(yè)家共同探討鴻蒙生態(tài)新未來

    近日,河南協(xié)企業(yè)家交流會——“鴻蒙千帆啟航 創(chuàng)新提質(zhì)生產(chǎn)”主題活動在鄭州舉行
    的頭像 發(fā)表于 05-08 09:24 ?404次閱讀

    通動力聯(lián)合華為云推出鴻蒙應(yīng)用聯(lián)營商品

    近日,通動力與華為云推出的聯(lián)營商品“通動力鴻蒙應(yīng)用及元服務(wù)定制開發(fā)服務(wù)”正式入駐華為云云商店,通動力成為在華為鴻蒙應(yīng)用生態(tài)認(rèn)證服務(wù)商中
    的頭像 發(fā)表于 03-26 09:30 ?426次閱讀
    <b class='flag-5'>軟</b>通動力聯(lián)合華為云推出<b class='flag-5'>鴻蒙</b>應(yīng)用聯(lián)營商品

    通動力與鴻蒙生態(tài)服務(wù)雙方將共同聚焦鴻蒙原生應(yīng)用開發(fā)和培訓(xùn)領(lǐng)域

    3月8日,通動力與鴻蒙生態(tài)服務(wù)(深圳)有限公司(以下簡稱“鴻蒙生態(tài)服務(wù)公司”)簽署合作協(xié)議,雙方將共同聚焦鴻蒙原生應(yīng)用開發(fā)和培訓(xùn)領(lǐng)域
    的頭像 發(fā)表于 03-14 09:54 ?425次閱讀

    通動力榮獲“鴻蒙智聯(lián)卓越解決方案伙伴”

    Connect Partner,通動力受邀參會,并與華為簽訂了鴻蒙智聯(lián)生態(tài)解決方案合作伙伴協(xié)議,進(jìn)一步深化了雙方在鴻蒙生態(tài)領(lǐng)域的合作。
    的頭像 發(fā)表于 03-14 09:37 ?362次閱讀

    鴻蒙生態(tài)千帆起!通動力攜手小牛電動加速推進(jìn)鴻蒙原生應(yīng)用開發(fā)

    協(xié)議,通動力將依托在鴻蒙生態(tài)領(lǐng)域的研發(fā)經(jīng)驗積累、服務(wù)及應(yīng)用組合實踐,助力牛電科技旗下品牌“小牛電動”全面啟動鴻蒙原生應(yīng)用開發(fā),實現(xiàn)智能便捷、智能安全、智能服務(wù)、智能生活四大版塊的用戶出行體驗升級。 牛電科技智能化平臺負(fù)責(zé)人馮龍
    的頭像 發(fā)表于 12-02 17:40 ?1013次閱讀

    通動力聯(lián)手聚變打造融合解決方案

    11月24日,以“融合同心 聚力共贏”為主題的聚變融合產(chǎn)品研討會在鄭州龍子湖舉辦。作為唯一受邀參加聯(lián)合解決方案分享的合作伙伴,通動力重點展示了與聚變在安平園區(qū)領(lǐng)域的合作成果,并
    的頭像 發(fā)表于 11-28 19:10 ?1192次閱讀

    通動力再添鴻蒙生態(tài)盟友,引領(lǐng)鴻蒙原生應(yīng)用黃金時代

    11月16日,由華為主辦的Huawei Developer Day(HDD)系列沙龍活動--生態(tài)伙伴賦能交流會在深圳成功舉辦。通動力與華為及眾多企業(yè)伙伴的運(yùn)營專家與開發(fā)者朋友們,共同探討鴻蒙原生
    的頭像 發(fā)表于 11-17 22:05 ?481次閱讀

    有關(guān)MOST總線詳細(xì)解釋

    MOST總線(Media Oriented Systems Transport)是一種用于車載多媒體系統(tǒng)的通信標(biāo)準(zhǔn),旨在提供高質(zhì)量音頻和視頻傳輸。以下是有關(guān)MOST總線詳細(xì)解釋。
    的頭像 發(fā)表于 10-28 09:22 ?3607次閱讀

    通動力與鄉(xiāng)伴文旅、壹玖壹玖達(dá)成合作 共享共贏鴻蒙生態(tài)新藍(lán)圖

    魅力。本次交流會中,通動力分別與鄉(xiāng)伴文旅集團(tuán)、壹玖壹玖酒業(yè)集團(tuán)簽訂戰(zhàn)略合作協(xié)議,通動力將以深厚的鴻蒙生態(tài)多行業(yè)實踐經(jīng)驗和全棧數(shù)字化服務(wù)為基礎(chǔ),全面助力文旅行業(yè)與酒類產(chǎn)業(yè)開拓商業(yè)新模式,共享共贏
    的頭像 發(fā)表于 10-25 18:56 ?445次閱讀
    <b class='flag-5'>軟</b>通動力與鄉(xiāng)伴文旅、壹玖壹玖達(dá)成合作 共享共贏<b class='flag-5'>鴻蒙</b>生態(tài)新藍(lán)圖

    共享共贏鴻蒙生態(tài)新藍(lán)圖,通動力與鄉(xiāng)伴文旅、壹玖壹玖達(dá)成戰(zhàn)略合作

    魅力。本次交流會中,通動力分別與鄉(xiāng)伴文旅集團(tuán)、壹玖壹玖酒業(yè)集團(tuán)簽訂戰(zhàn)略合作協(xié)議,通動力將以深厚的鴻蒙生態(tài)多行業(yè)實踐經(jīng)驗和全棧數(shù)字化服務(wù)為基礎(chǔ),全面助力文旅行業(yè)與酒類產(chǎn)業(yè)開拓商業(yè)新模式,共享共贏
    的頭像 發(fā)表于 10-25 16:00 ?352次閱讀