色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Harmony軟總線的簡單使用

HiHope社區官方號 ? 2022-04-11 15:31 ? 次閱讀

軟總線是什么?

分布式軟總線是手機、平板、智能穿戴、智慧屏、車機等分布式設備的通信基座,為設備之間的互聯互通提供了統一的分布式通信能力。

本篇講到的知識點:

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

技術要求和環境要求:

  • 基本組件熟練使用,ServiceAbility,CommonEventManager(公共事件開發)
  • 兩臺HarmonyOS 2.0的真機 或 DevEco Studio 2.2 Beta1(分布式模擬器的自動開啟,可同時模擬運行兩臺設備,且自動組網)。

獲取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();

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 分布式
    +關注

    關注

    1

    文章

    895

    瀏覽量

    74498
收藏 人收藏

    評論

    相關推薦

    使用CAN總線的注意事項 CAN總線與其他通信協議對比

    線性或星形拓撲。線性拓撲簡單,但對電纜長度有限制;星形拓撲可以減少電纜長度,但需要使用集線器或中繼器。 終端電阻 :在CAN總線的兩端必須安裝終端電阻,以減少信號反射,保證信號完整性。 電纜選擇 :選擇適合CAN總線的雙絞線電纜
    的頭像 發表于 11-21 10:16 ?320次閱讀

    CAN總線與LIN總線的區別

    隨著汽車電子系統的復雜性增加,車輛內部通信的需求也在不斷增長。CAN總線和LIN總線作為兩種主要的車載通信協議,各自扮演著重要的角色。 1. 設計原理 CAN總線: 數據傳輸速率: CAN總線
    的頭像 發表于 11-12 10:13 ?1064次閱讀

    前端總線是屬于什么總線

    前端總線(Front-Side Bus,簡稱FSB)在計算機體系結構中扮演著至關重要的角色,它屬于系統總線的一種,是連接CPU與主板北橋芯片(或稱為內存控制器集線器)之間的高速數據通道。以下是對前端
    的頭像 發表于 10-10 17:11 ?497次閱讀

    FPGA的IP核使用技巧

    的工作原理、使用方法和限制條件。 參數化配置 : 如果IP核提供了參數化配置選項,可以根據項目需求進行配置。例如,對于RAM IP核,可以選擇單端口RAM、簡單雙端口RAM或真正雙端口RAM等類型
    發表于 05-27 16:13

    請問主控總線和被控總線有什么區別?

    謝謝,我在看手冊的時候看到F4有幾個主控總線和被控總線,網上查不到比較具體的,我覺得可能是比較簡單的概念只是網上一下子查不到,麻煩了。
    發表于 05-11 06:15

    什么是小圓柱包電池?小圓柱包電池的優缺點?

    小圓柱包電池是一種鋰離子電池,它結合了小圓柱電池的外形和包電池的封裝特性。
    的頭像 發表于 05-07 11:23 ?753次閱讀

    什么是包電池?包電池就是石墨烯電池嗎?

    包電池是一種鋰離子電池,其名稱來源于其獨特的封裝方式。與傳統的圓柱形或方形硬殼電池不同,包電池使用鋁塑復合膜作為外殼材料,這種軟性包裝材料為電池提供了更大的設計靈活性和一些獨特的性能優勢。
    的頭像 發表于 04-28 17:40 ?1886次閱讀

    CAN總線錯誤幀及其排查方法簡單介紹#汽車CAN總線?

    CAN總線汽車電子
    北匯信息POLELINK
    發布于 :2024年03月15日 14:14:40

    什么是硬開關?什么是開關 硬開關和開關的優缺點

    什么是硬開關?什么是開關 硬開關和開關的優缺點 硬開關和開關是電力系統中常用的兩種開關方式。它們在功率傳輸和電力控制方面有著不同的特點和應用。 硬開關是通過物理機械開關,以切斷或連接電路,控制
    的頭像 發表于 02-20 11:43 ?7044次閱讀

    什么是CAN總線通信?CAN總線工作原理

    這意味著變送器通過CAN收發器改變總線電平,并將其信息傳輸到CAN總線。接收器通過監測總線電平將總線上的信息讀取到自己的CAN收發器中。
    發表于 02-19 14:53 ?6498次閱讀
    什么是CAN<b class='flag-5'>總線</b>通信?CAN<b class='flag-5'>總線</b>工作原理

    I2C總線的特點及應用

    I2C總線最主要的優點是其簡單性和有效性。占用的空間小,降低了互連成本。總線的長度可高達7.6m,并且能夠以10kbps的最大傳輸速率支持40個組件。
    發表于 02-02 15:56 ?725次閱讀

    包電池優劣勢有哪些?

    包電池優劣勢有哪些? 包電池是一種新型的電池類型,相對于傳統的硬包電池有著一些優勢和劣勢。 第一部分:引言 包電池是一種采用包式包裝的鋰離子電池,近年來在電動汽車、電子設備等領
    的頭像 發表于 01-10 10:30 ?2698次閱讀

    解密路由:打破網絡傳統,輕松定制你的路由體驗,千度迷你電腦入門級路由

    1. 基礎概念解釋: 路由,聽起來高大上,實際上是一種讓網絡變得更靈活的神奇工具。簡單來說,路由就是通過一臺普通電腦,用特定的軟件來完成路由器的功能。不同于傳統硬件路由器,路由能
    的頭像 發表于 01-09 11:23 ?1002次閱讀
    解密<b class='flag-5'>軟</b>路由:打破網絡傳統,輕松定制你的路由體驗,千度迷你電腦入門級<b class='flag-5'>軟</b>路由

    open harmony照明開關應用介紹

    最近幾年,智能家居成為了人們日常生活中的熱門話題。其中,智能照明系統作為智能家居的重要組成部分之一,正在迅速流行起來。而今天我將為大家詳細介紹一款智能照明系統中的開關——open harmony照明
    的頭像 發表于 01-05 17:00 ?1121次閱讀

    什么是APB協議/總線?APB總線入門

    上一篇文章簡單講解了什么是AMBA總線,簡單來說,AMBA總線是一系列協議。定義了適用于不同場景的總線家族。今天我們就來將AMBA
    的頭像 發表于 01-02 11:37 ?3621次閱讀
    什么是APB協議/<b class='flag-5'>總線</b>?APB<b class='flag-5'>總線</b>入門
    主站蜘蛛池模板: 野花社区WWW韩国日本| 最新无码专区在线视频| 岛国精品在线观看| 理论937| 久久vs国产综合色| 男女后进式猛烈xx00动态图片| 吻嘴胸全身好爽床大全 | 老头扒开粉缝亲我下面| 午夜一区二区三区| 99亚洲精品自拍AV成人软件| 久久机热视频 这里只有精品首页| 视频三区 国产盗摄| ppypp日本欧美一区二区| 免费国产麻豆传| 最近中文字幕在线中文视频| 好色的妹妹| 亚洲国产精品嫩草影院久久| 福利视频一二三在线观看| 日本人添下面的全过程| A级超碰视频在线观看| 男人一生要读的书| 99免费在线观看| 欧美精品专区免费观看| xxx在线播放| 免费 高清 中文在线观看| 在线亚洲精品福利网址导航| 久久国产精品麻豆AV影视| 一级毛片视频免费| 久久爽狠狠添AV激情五月| 曰本女人牲交视频免费| 麻豆国产精品va在线观看约| 专干老肥熟女视频网站300部| 美女国产毛片A区内射| 999zyz色资源站在线观看| 男人天堂黄色| 豆奶视频在线高清观看| 小草高清视频免费直播| 久久久这里有精品999| av影音先锋影院男人站| 忘忧草在线社区WWW日本直播 | 91九色porny蝌蚪|