自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

鴻蒙軟總線的簡(jiǎn)單使用

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

[[418675]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

軟總線是什么?

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

本篇講到的知識(shí)點(diǎn):

  • 啟動(dòng)遠(yuǎn)程FA(Feature Ability)
  • 連接遠(yuǎn)程PA(Particle Ability),發(fā)送控制命令&遠(yuǎn)端處理數(shù)據(jù)(場(chǎng)景1:傳遞加法數(shù)據(jù),遠(yuǎn)端計(jì)算后返回給客戶端。場(chǎng)景2:傳遞數(shù)據(jù),遠(yuǎn)端Service接收后更新遠(yuǎn)端的UI。)
  • FA跨設(shè)備遷移(可回遷)
  • 混合打包
  • 其他奇怪的知識(shí)

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

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

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

獲取DevEco Studio 2.2 Beta1

Service Ability

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

其他

  • 真機(jī)分布式通信要求:同一局域網(wǎng)內(nèi),登錄相同華為賬號(hào),開(kāi)啟藍(lán)牙 (可行方案),這樣在 設(shè)定-超級(jí)終端 中 附近我的設(shè)備 即可查看到另外一臺(tái)設(shè)備。
  • 分布式模擬器 會(huì)自動(dòng)組網(wǎng),不需要手動(dòng)做其他操作。(設(shè)定的超級(jí)終端中看不出來(lái)已經(jīng)組網(wǎng)成功)
  • 運(yùn)行到真機(jī)上需要進(jìn)行簽名,模擬器則不需要。

代碼下載

gitee HarmonySoftBus

github HarmonySoftBus

先看下效果

鴻蒙軟總線的簡(jiǎn)單使用-鴻蒙HarmonyOS技術(shù)社區(qū)
鴻蒙軟總線的簡(jiǎn)單使用-鴻蒙HarmonyOS技術(shù)社區(qū)
鴻蒙軟總線的簡(jiǎn)單使用-鴻蒙HarmonyOS技術(shù)社區(qū)

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

鴻蒙軟總線的簡(jiǎn)單使用-鴻蒙HarmonyOS技術(shù)社區(qū)
  • adapter:DevicesListAdapter,用于向ListContainer控件中填充設(shè)備數(shù)據(jù)。
  • component:SelectDeviceDialog封裝了設(shè)備選擇彈框
  • proxy:定義了連接遠(yuǎn)程和調(diào)用遠(yuǎn)程service(PA)的接口、實(shí)現(xiàn)類以及代理。
  • service:RemoteService為被控制端service,供手機(jī)端遠(yuǎn)程調(diào)用。

申請(qǐng)權(quán)限

在entry\src\main\config.json中申請(qǐng)以下4個(gè)權(quán)限:

  1. ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE:用于允許監(jiān)聽(tīng)分布式組網(wǎng)內(nèi)的設(shè)備狀態(tài)變化。
  2. ohos.permission.GET_DISTRIBUTED_DEVICE_INFO:用于允許獲取分布式組網(wǎng)內(nèi)的設(shè)備列表和設(shè)備信息。
  3. ohos.permission.GET_BUNDLE_INFO:用于查詢其他應(yīng)用的信息。
  4. ohos.permission.DISTRIBUTED_DATASYNC:用于允許不同設(shè)備間的數(shù)據(jù)交換。

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

鴻蒙軟總線的簡(jiǎn)單使用-鴻蒙HarmonyOS技術(shù)社區(qū)

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

鴻蒙軟總線的簡(jiǎn)單使用-鴻蒙HarmonyOS技術(shù)社區(qū)

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

鴻蒙軟總線的簡(jiǎn)單使用-鴻蒙HarmonyOS技術(shù)社區(qū)

啟動(dòng)遠(yuǎn)程FA

鴻蒙軟總線的簡(jiǎn)單使用-鴻蒙HarmonyOS技術(shù)社區(qū)

和普通畫(huà)面的啟動(dòng)類似,withDeviceId("") 為本地畫(huà)面跳轉(zhuǎn)。

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

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

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

  1. public class MyRemoteProxy implements IRemoteBroker { 
  2.     /** 
  3.      * 遠(yuǎn)端響應(yīng)成功的標(biāo)識(shí) 
  4.      */ 
  5.     public static final int ERR_OK = 0; 
  6.     private static final String TAG = MyRemoteProxy.class.getSimpleName(); 
  7.     private final IRemoteObject remote; 
  8.     public MyRemoteProxy(IRemoteObject remote) { 
  9.         this.remote = remote; 
  10.     } 
  11.  
  12.     @Override 
  13.     public IRemoteObject asObject() { 
  14.         return remote; 
  15.     } 
  16.      
  17.     // 攜帶數(shù)據(jù)向遠(yuǎn)端Sevice發(fā)送請(qǐng)求 
  18.     public int senDataToRemote(int requestType, Map paramMap) { 
  19.         MessageParcel data = MessageParcel.obtain(); 
  20.         MessageParcel reply = MessageParcel.obtain(); 
  21.         MessageOption option = new MessageOption(MessageOption.TF_SYNC); 
  22.         int ec = 1; 
  23.         int result = -1; 
  24.         try { 
  25.             if (paramMap.get("inputString") instanceof String) { 
  26.                 String inputString = (String) paramMap.get("inputString"); 
  27.                 data.writeInt(requestType); 
  28.                 data.writeString(inputString); 
  29.                 remote.sendRequest(requestType, data, reply, option); 
  30.             } 
  31.             ec = reply.readInt(); 
  32.             if (ec != ERR_OK) { 
  33.                 LogUtils.error(TAG, "RemoteException:"); 
  34.             } else { 
  35.                 if (requestType == ConnectManagerIml.REQUEST_PLUS) { 
  36.                     result = reply.readInt();   // 返回成功后拿到遠(yuǎn)端計(jì)算的結(jié)果。 
  37.                 } 
  38.             } 
  39.         } catch (RemoteException e) { 
  40.             LogUtils.error(TAG, "RemoteException:"); 
  41.         } finally { 
  42.             ec = ERR_OK; 
  43.             if (result != -1) { 
  44.                 ec = result; 
  45.             } 
  46.             data.reclaim(); 
  47.             reply.reclaim(); 
  48.         } 
  49.         return ec; 
  50.     } 
  • 實(shí)現(xiàn)IRemoteBroker接口, asObject返回遠(yuǎn)程RemoteObject對(duì)象
  • 創(chuàng)建構(gòu)造方法(參數(shù)為connectAbility成功時(shí)回調(diào)方法onAbilityConnectDone中的遠(yuǎn)程操作對(duì)象)
  • 封裝向遠(yuǎn)端發(fā)送請(qǐng)求的方法,便于后續(xù)進(jìn)行控制 (本例中是簡(jiǎn)單的加法請(qǐng)求)
鴻蒙軟總線的簡(jiǎn)單使用-鴻蒙HarmonyOS技術(shù)社區(qū)

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

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

第二步: 遠(yuǎn)端Service中,創(chuàng)建RemoteObject并處理請(qǐng)求

  1. public class MyRemote extends RemoteObject implements IRemoteBroker { 
  2.     private MyRemote() { 
  3.         super("===MyService_Remote"); 
  4.     } 
  5.     @Override 
  6.     public IRemoteObject asObject() { 
  7.         return this; 
  8.     } 
  9.     @Override 
  10.     public boolean onRemoteRequest(int code, MessageParcel data, MessageParcel reply, MessageOption option) { 
  11.         LogUtils.info(TAG, "===onRemoteRequest......"); 
  12.         int requestType = data.readInt(); 
  13.         String inputString = ""
  14.         if (code == REQUEST_SEND_DATA) { 
  15.             inputString = data.readString(); 
  16.             publishInput(requestType, inputString); 
  17.         } else if (code == REQUEST_PLUS) { 
  18.             int a = data.readInt(); 
  19.             int b = data.readInt(); 
  20.             reply.writeInt(ERR_OK); 
  21.             reply.writeInt(a + b); 
  22.             publishPlusResult(requestType, String.valueOf(a + b)); 
  23.         } 
  24.         return true
  25.     } 
  26. @Override 
  27. protected IRemoteObject onConnect(Intent intent) { 
  28.     super.onConnect(intent); 
  29.     return remote.asObject(); 

onRemoteRequest 接收來(lái)自 sendRequest(requestType, data, reply, option); 傳遞過(guò)來(lái)的請(qǐng)求類型,數(shù)據(jù),返回值,請(qǐng)求類型。

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

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

鴻蒙軟總線的簡(jiǎn)單使用-鴻蒙HarmonyOS技術(shù)社區(qū)

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

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

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

鴻蒙軟總線的簡(jiǎn)單使用-鴻蒙HarmonyOS技術(shù)社區(qū)

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

鴻蒙軟總線的簡(jiǎn)單使用-鴻蒙HarmonyOS技術(shù)社區(qū)

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

鴻蒙軟總線的簡(jiǎn)單使用-鴻蒙HarmonyOS技術(shù)社區(qū)

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

跨端遷移開(kāi)發(fā)指導(dǎo) 目的: 實(shí)現(xiàn)正在編輯的頁(yè)面,流轉(zhuǎn)的另外一臺(tái)設(shè)備,利用分布式的能力提高用戶的體驗(yàn)。

步驟一

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

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

鴻蒙軟總線的簡(jiǎn)單使用-鴻蒙HarmonyOS技術(shù)社區(qū)

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

onSaveData(IntentParams saveData) 如果onStartContinuation()返回true,則系統(tǒng)回調(diào)此方法,開(kāi)發(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)此方法,開(kāi)發(fā)者在此回調(diào)中接受用于恢復(fù)FA狀態(tài)的數(shù)據(jù)。

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

坑點(diǎn)2: 不要忘記 return true; Ability中也要。

坑點(diǎn)3: onRestoreData進(jìn)行UI的恢復(fù)時(shí),需要切換到UI線程,否則...(沒(méi)報(bào)錯(cuò)Log)

步驟二

可回遷的遷移

鴻蒙軟總線的簡(jiǎn)單使用-鴻蒙HarmonyOS技術(shù)社區(qū)

回遷(若是已經(jīng)回遷了,再進(jìn)行回遷,會(huì)報(bào)錯(cuò)。 先try-catch了)

鴻蒙軟總線的簡(jiǎn)單使用-鴻蒙HarmonyOS技術(shù)社區(qū)

混合打包

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

  • 直接運(yùn)行的 安卓應(yīng)用
  • 使用DevEco Studio編寫(xiě)的鴻蒙應(yīng)用
  • 已有開(kāi)發(fā)好的 安卓應(yīng)用,想擁有 鴻蒙的一些特性,從而進(jìn)行混合打包。apk邏輯無(wú)需變化,即可擁有鴻蒙特性,例如 服務(wù)卡片。

如何進(jìn)行混合打包?

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

奇怪的知識(shí)

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

設(shè)計(jì)字段:

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

鴻蒙軟總線的簡(jiǎn)單使用-鴻蒙HarmonyOS技術(shù)社區(qū)

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

數(shù)據(jù)存儲(chǔ):

鴻蒙軟總線的簡(jiǎn)單使用-鴻蒙HarmonyOS技術(shù)社區(qū)

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

查詢:

鴻蒙軟總線的簡(jiǎn)單使用-鴻蒙HarmonyOS技術(shù)社區(qū)

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來(lái)源: 鴻蒙社區(qū)
相關(guān)推薦

2022-03-18 15:29:02

Harmony鴻蒙架構(gòu)

2024-05-13 08:40:02

Go事件驅(qū)動(dòng)編程

2021-03-29 09:59:09

鴻蒙HarmonyOS應(yīng)用開(kāi)發(fā)

2020-11-16 11:29:40

HarmonyOS

2022-01-12 14:45:26

鴻蒙HarmonyOS應(yīng)用

2022-12-04 22:41:15

IPC分布式機(jī)制

2021-07-02 09:16:21

鴻蒙HarmonyOS應(yīng)用

2022-11-28 15:42:39

分布式軟總線鴻蒙

2010-07-06 16:02:30

HART協(xié)議

2013-03-28 16:31:48

AIDL的簡(jiǎn)單使用Android中AID

2021-06-30 07:19:36

Netty簡(jiǎn)單使用

2010-08-29 21:17:48

DHCP中繼

2014-07-17 11:36:27

Android Stu使用教程

2010-06-08 16:31:16

LIN總線協(xié)議

2010-06-08 16:55:46

CANopen總線協(xié)議

2010-06-08 15:55:14

CAN總線協(xié)議

2010-06-08 16:35:24

LIN總線協(xié)議

2010-06-09 11:05:28

SPI總線協(xié)議

2009-12-22 10:46:35

2013-06-13 10:29:39

CasperJS測(cè)試UI測(cè)試
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)