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

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

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

鴻蒙ArkUI-X跨語(yǔ)言調(diào)用說(shuō)明:【平臺(tái)橋接開發(fā)指南(Android)】

jf_46214456 ? 來(lái)源:jf_46214456 ? 作者:jf_46214456 ? 2024-05-25 16:26 ? 次閱讀

平臺(tái)橋接開發(fā)指南

平臺(tái)橋接用于客戶端(ArkUI)和平臺(tái)(AndroidiOS)之間傳遞消息,即用于ArkUI與平臺(tái)雙向數(shù)據(jù)傳遞、ArkUI側(cè)調(diào)用平臺(tái)的方法、平臺(tái)調(diào)用ArkUI側(cè)的方法。本文主要介紹Android平臺(tái)與ArkUI交互,ArkUI側(cè)具體用法請(qǐng)參考[Bridge API],Android側(cè)參考[BridgePlugin]。

Android平臺(tái)與ArkUI交互

開發(fā)前請(qǐng)熟悉鴻蒙開發(fā)指導(dǎo)文檔 :[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]點(diǎn)擊或者復(fù)制轉(zhuǎn)到。

創(chuàng)建平臺(tái)橋接

1、在ArkUI側(cè)創(chuàng)建平臺(tái)橋接。指定名稱,該名稱應(yīng)與Android側(cè)平臺(tái)橋接的名稱一致。通過(guò)創(chuàng)建的該對(duì)象即可調(diào)用平臺(tái)橋接的方法。

// xxx.ets

// 導(dǎo)入平臺(tái)橋接模塊
import bridge from '@arkui-x.bridge';

// 創(chuàng)建平臺(tái)橋接實(shí)例
const bridgeImpl = bridge.createBridge('Bridge');

2、在Android側(cè)創(chuàng)建BridgePlugin類。指定名稱,該名稱應(yīng)與ArkUI側(cè)平臺(tái)橋接的名稱一致。通過(guò)創(chuàng)建的該對(duì)象即可調(diào)用平臺(tái)橋接的方法。

// xxx.java

Bridge bridge = new Bridge(this, "Bridge", getInstanceId());

場(chǎng)景一:ArkUI側(cè)向Android側(cè)傳遞數(shù)據(jù)

1、ArkUI側(cè)向Android側(cè)傳遞數(shù)據(jù)。

// xxx.ets

bridgeImpl.sendMessage('text').then((res)= >{
    // 監(jiān)聽Android側(cè)的回執(zhí)
    console.log('response: ' + res);
}).catch((err) = > {
    console.log('error: ' + JSON.stringify(err));
});

2、Android側(cè)接收來(lái)自ArkUI側(cè)的數(shù)據(jù)。

// xxx.java

public Bridge(Context context, String name, int id) {
    super(context, name, id);
    setMessageListener(this);
}

// 注冊(cè)回調(diào),監(jiān)聽ArkUI側(cè)的數(shù)據(jù)傳遞
@Override
public Object onMessage(Object data) {
    // 返回回執(zhí)給ArkUI側(cè)
    return "java onMessage success";
}

場(chǎng)景二:Android側(cè)向ArkUI側(cè)傳遞數(shù)據(jù)

1、Android側(cè)向ArkUI側(cè)發(fā)送數(shù)據(jù)。

// xxx.java

String[] data = { "message", "from", "android" };
bridge.sendMessage(data);

2、ArkUI側(cè)設(shè)置回調(diào),用于接收Android側(cè)發(fā)送的數(shù)據(jù)。

// xxx.ets

bridgeImpl.setMessageListener((message) = > {
    console.log('receive message: ' + message);

    // 收到消息后,向Android側(cè)發(fā)送回執(zhí)
    return "ArkUI reveice message success";
});

3、Android側(cè)注冊(cè)回調(diào),監(jiān)聽ArkUI側(cè)收到數(shù)據(jù)后的回執(zhí)。

// xxx.java

public Bridge(Context context, String name, int id) {
    super(context, name, id);
    setMessageListener(this);
}

// 注冊(cè)回調(diào),監(jiān)聽ArkUI側(cè)的回執(zhí)
@Override
public void onMessageResponse(Object data) {}

場(chǎng)景三:ArkUI側(cè)調(diào)用Android側(cè)的方法

1、在ArkUI側(cè)調(diào)用Android側(cè)的方法。

// xxx.ets

bridgeImpl.callMethod('platformCallMethod').then((res)= >{
    console.log('result: ' + res);
}).catch((err) = > {
    console.error('error: ' + JSON.stringify(err));
});

2、在Android側(cè)實(shí)現(xiàn)被調(diào)用的方法。

// xxx.java

public platformCallMethod() {
  return "call java platformCallMethod success";
}

場(chǎng)景四:Android側(cè)調(diào)用ArkUI側(cè)的方法

1、注冊(cè)ArkUI側(cè)方法,供Android側(cè)調(diào)用。

// xxx.ets

function getString() {
  return 'call js getString success';
}

bridgeImpl.registerMethod({ name: 'getString', method: getString });

2、Android側(cè)調(diào)用ArkUI側(cè)的方法。

Object[] paramObject = {};
MethodData methodData = new MethodData("getString", paramObject);
bridge.callMethod(methodData);

場(chǎng)景五:ArkUI側(cè)監(jiān)聽Android側(cè)的方法

1、注冊(cè)ArkUI側(cè)方法,供Android側(cè)調(diào)用。

// xxx.ets

bridgeImpl.registerMethod({ name: 'getString', method: getString });

2、移除已注冊(cè)的ArkUI側(cè)方法。

// xxx.ets

bridgeImpl.unRegisterMethod('getString');

3、在Android側(cè)注冊(cè)回調(diào),監(jiān)聽方法注冊(cè)、注銷。

// xxx.java

public Bridge(Context context, String name, int id) {
    super(context, name, id);
    setMethodResultListener(this);
}

@Override
public void onSuccess(Object o) {}

@Override
public void onError(String s, int i, String s1) {}

@Override
public void onMethodCancel(String s) {}

場(chǎng)景示例

本場(chǎng)景展示了當(dāng)ArkUI頁(yè)面啟動(dòng)時(shí),調(diào)用Android側(cè)方法,并將Android側(cè)方法的返回值顯示在頁(yè)面上。點(diǎn)擊按鈕,ArkUI側(cè)發(fā)送數(shù)據(jù)到Android側(cè),Android側(cè)收到數(shù)據(jù)后,返回回執(zhí)數(shù)據(jù),并將回執(zhí)數(shù)據(jù)顯示在頁(yè)面上。

ArkUI側(cè)

編寫ArkUI頁(yè)面Index.ets。

// Index.ets

// 導(dǎo)入平臺(tái)橋接模塊
import bridge from '@arkui-x.bridge';

@Entry
@Component
struct Index {
  // 創(chuàng)建平臺(tái)橋接對(duì)象
  private bridgeImpl = bridge.createBridge('Bridge');
  @State helloArkUI: string = '';
  @State nativeResponse: string = '';

  aboutToAppear() {
    this.getHelloArkUI();
  }

  getHelloArkUI() {
    // 調(diào)用Android側(cè)方法
    this.bridgeImpl.callMethod('getHelloArkUI').then((result: string) = > {
      // 通過(guò)狀態(tài)變量,將Android側(cè)方法的返回值顯示在頁(yè)面上
      this.helloArkUI = result;
    });
  }

  build() {
    Row() {
      Column() {
        Text(this.helloArkUI)
          .fontSize(15)
          .margin(10)
        Button('sendMessage')
          .fontSize(15)
          .margin(10)
          .onClick(async () = > {
            // 發(fā)送數(shù)據(jù)到Android側(cè),并通過(guò)狀態(tài)變量,將Android側(cè)的響應(yīng)數(shù)據(jù)顯示在頁(yè)面上
            this.nativeResponse = await this.bridgeImpl.sendMessage('Hello ArkUI-X!');
          })
        Text('Response from Native: ' + this.nativeResponse)
          .fontSize(15)
          .margin(10)
      }
      .width('100%')
    }
    .height('100%')
  }
}
Android側(cè)
// Bridge.java

package com.example.bridgestage;

import android.content.Context;

// 引用平臺(tái)橋接模塊
import ohos.ace.adapter.capability.bridge.BridgePlugin;
import ohos.ace.adapter.capability.bridge.IMessageListener;

public class Bridge extends BridgePlugin implements IMessageListener {
    public Bridge(Context context, String name, int id) {
        super(context, name, id);

        setMessageListener(this);
    }

    // Android側(cè)方法,供ArkUI側(cè)調(diào)用
    public String getHelloArkUI() {
        return "Hello ArkUI!";
    }

    // 注冊(cè)回調(diào),接收ArkUI側(cè)發(fā)來(lái)的數(shù)據(jù)
    @Override
    public Object onMessage(Object object) {
        return "java onMessage success";
    }

    @Override
    public void onMessageResponse(Object object) {}
}
//	EntryMainActivity.java

package com.example.bridgestage;

import android.os.Bundle;
import ohos.stage.ability.adapter.StageActivity;

public class EntryMainActivity extends StageActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // 建立與ArkUI側(cè)同名的平臺(tái)橋接,即可用于消息傳遞
        new Bridge(this, "Bridge", getInstanceId());

        super.setInstanceName("com.example.bridgestage:entry:MainAbility:");
        super.onCreate(savedInstanceState);
    }
}

`HarmonyOSOpenHarmony鴻蒙文檔籽料:mau123789是v直接拿`

搜狗高速瀏覽器截圖20240326151450.png

// MyApplication.java

package com.example.bridgestage;

import ohos.stage.ability.adapter.StageApplication;

public class MyApplication extends StageApplication {
    @Override
    public void onCreate() {
        super.onCreate();
    }
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1966

    瀏覽量

    29962
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3635

    瀏覽量

    16061
  • 鴻蒙OS
    +關(guān)注

    關(guān)注

    0

    文章

    188

    瀏覽量

    4359
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    鴻蒙開發(fā)學(xué)習(xí):初探【ArkUI-X

    **簡(jiǎn)單來(lái)說(shuō),ArkTS + ArkUI-X 對(duì)標(biāo)的框架為 flutter,一次代碼,編譯為 native 全平臺(tái)運(yùn)行**
    的頭像 發(fā)表于 05-13 15:58 ?957次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>學(xué)習(xí):初探【<b class='flag-5'>ArkUI-X</b>】

    鴻蒙ArkUI-X平臺(tái)開發(fā):【命令行工具(ACE Tools)】

    ACE Tools是一套為ArkUI-X項(xiàng)目平臺(tái)應(yīng)用開發(fā)者提供的命令行工具,支持在Windows/Ubuntu/macOS平臺(tái)運(yùn)行,用于構(gòu)
    的頭像 發(fā)表于 05-21 17:39 ?1558次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI-X</b><b class='flag-5'>跨</b><b class='flag-5'>平臺(tái)</b><b class='flag-5'>開發(fā)</b>:【命令行工具(ACE Tools)】

    鴻蒙ArkUI-X平臺(tái)開發(fā):【SDK目錄結(jié)構(gòu)介紹】

    本文檔配套ArkUI-X,將OpenHarmony ArkUI開發(fā)框架擴(kuò)展到不同的OS平臺(tái),比如Android和iOS
    的頭像 發(fā)表于 05-20 16:28 ?752次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI-X</b><b class='flag-5'>跨</b><b class='flag-5'>平臺(tái)</b><b class='flag-5'>開發(fā)</b>:【SDK目錄結(jié)構(gòu)介紹】

    鴻蒙ArkUI-X平臺(tái)開發(fā):【bility開發(fā)說(shuō)明Android平臺(tái))】

    本文介紹將ArkUI框架擴(kuò)展到Android平臺(tái)所需要的必要的類及其使用說(shuō)明開發(fā)者基于OpenHarmony,可復(fù)用大部分的應(yīng)用代碼(生命
    的頭像 發(fā)表于 05-21 10:54 ?858次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI-X</b><b class='flag-5'>跨</b><b class='flag-5'>平臺(tái)</b><b class='flag-5'>開發(fā)</b>:【bility<b class='flag-5'>開發(fā)</b><b class='flag-5'>說(shuō)明</b>(<b class='flag-5'>Android</b><b class='flag-5'>平臺(tái)</b>)】

    鴻蒙ArkUI-X語(yǔ)言調(diào)用說(shuō)明:【平臺(tái)開發(fā)指南Android)Bridge API】

    本模塊提供ArkUI端和Android或iOS平臺(tái)端消息通信的功能,包括數(shù)據(jù)傳輸、方法調(diào)用和事件調(diào)用。需配套
    的頭像 發(fā)表于 05-25 16:30 ?579次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI-X</b><b class='flag-5'>跨</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>調(diào)用</b><b class='flag-5'>說(shuō)明</b>:【<b class='flag-5'>平臺(tái)</b><b class='flag-5'>橋</b><b class='flag-5'>接</b><b class='flag-5'>開發(fā)指南</b>(<b class='flag-5'>Android</b>)Bridge API】

    鴻蒙ArkUI-X語(yǔ)言調(diào)用說(shuō)明:【平臺(tái)開發(fā)指南Android)BridgePlugin】

    本模塊提供ArkUI端和Android平臺(tái)端消息通信的功能,包括數(shù)據(jù)傳輸、方法調(diào)用和事件調(diào)用。需配套Ar
    的頭像 發(fā)表于 05-22 14:52 ?1086次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI-X</b><b class='flag-5'>跨</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>調(diào)用</b><b class='flag-5'>說(shuō)明</b>:【<b class='flag-5'>平臺(tái)</b><b class='flag-5'>橋</b><b class='flag-5'>接</b><b class='flag-5'>開發(fā)指南</b>(<b class='flag-5'>Android</b>)BridgePlugin】

    ArkUI-X開發(fā)指南:【SDK配置和構(gòu)建說(shuō)明

    ArkUI-X SDK是ArkUI-X開源項(xiàng)目的編譯產(chǎn)物,可將ArkUI-X SDK集成到現(xiàn)有Android和iOS應(yīng)用工程中,使開發(fā)者基于
    的頭像 發(fā)表于 05-25 16:48 ?2467次閱讀
    <b class='flag-5'>ArkUI-X</b><b class='flag-5'>開發(fā)指南</b>:【SDK配置和構(gòu)建<b class='flag-5'>說(shuō)明</b>】

    資訊速遞 | ArkUI-X 預(yù)覽版已正式開源!

    語(yǔ)言等能力。 ● 對(duì)于開發(fā)時(shí)所使用的API,都是OpenHarmony生態(tài)的標(biāo)準(zhǔn)API,在平臺(tái)上,支持標(biāo)準(zhǔn)API按照插件的方式按需打包。 ● A
    發(fā)表于 08-11 16:10

    鴻蒙平臺(tái)框架:【ArkUi-X】創(chuàng)建工程

    鴻蒙推出了鴻ArkUi-X 框架所以就寫個(gè)文章分享一下
    的頭像 發(fā)表于 05-13 17:48 ?831次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>跨</b><b class='flag-5'>平臺(tái)</b>框架:【<b class='flag-5'>ArkUi-X</b>】創(chuàng)建工程

    鴻蒙ArkUI-X平臺(tái)技術(shù):【開發(fā)準(zhǔn)備】

    本文檔適用于ArkUI平臺(tái)應(yīng)用開發(fā)的初學(xué)者。通過(guò)開發(fā)環(huán)境搭建、應(yīng)用工程創(chuàng)建、編譯和運(yùn)行,熟悉ArkUI
    的頭像 發(fā)表于 05-24 10:40 ?411次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI-X</b><b class='flag-5'>跨</b><b class='flag-5'>平臺(tái)</b>技術(shù):【<b class='flag-5'>開發(fā)</b>準(zhǔn)備】

    鴻蒙ArkUI-X平臺(tái)技術(shù):【開發(fā)初體驗(yàn)】

    在DevEco Studio中導(dǎo)入ArkUI-X Sample,快速創(chuàng)建平臺(tái)工程。
    的頭像 發(fā)表于 05-17 15:54 ?546次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI-X</b><b class='flag-5'>跨</b><b class='flag-5'>平臺(tái)</b>技術(shù):【<b class='flag-5'>開發(fā)</b>初體驗(yàn)】

    鴻蒙ArkUI-X平臺(tái)開發(fā):【 應(yīng)用工程結(jié)構(gòu)說(shuō)明

    本文檔配套ArkUI-X,將OpenHarmony ArkUI開發(fā)框架擴(kuò)展到不同的OS平臺(tái),比如Android和iOS
    的頭像 發(fā)表于 05-19 21:05 ?518次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI-X</b><b class='flag-5'>跨</b><b class='flag-5'>平臺(tái)</b><b class='flag-5'>開發(fā)</b>:【 應(yīng)用工程結(jié)構(gòu)<b class='flag-5'>說(shuō)明</b>】

    鴻蒙ArkUI-X語(yǔ)言調(diào)用說(shuō)明:【平臺(tái)(@arkui-x.bridge)】

    平臺(tái)用于客戶端(ArkUI)和平臺(tái)Android或iOS)之間傳遞消息,即用于
    的頭像 發(fā)表于 05-21 15:09 ?644次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI-X</b><b class='flag-5'>跨</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>調(diào)用</b><b class='flag-5'>說(shuō)明</b>:【<b class='flag-5'>平臺(tái)</b><b class='flag-5'>橋</b><b class='flag-5'>接</b>(@<b class='flag-5'>arkui-x</b>.bridge)】

    鴻蒙ArkUI-X語(yǔ)言調(diào)用說(shuō)明平臺(tái)差異化【Android、ios動(dòng)態(tài)化】

    ArkUI-X支持動(dòng)態(tài)化,使用者可以根據(jù)自己需要?jiǎng)討B(tài)發(fā)布平臺(tái)內(nèi)容,從而使平臺(tái)部分和宿主應(yīng)用進(jìn)行解耦。
    的頭像 發(fā)表于 05-23 14:38 ?736次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI-X</b><b class='flag-5'>跨</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>調(diào)用</b><b class='flag-5'>說(shuō)明</b>:<b class='flag-5'>平臺(tái)</b>差異化【<b class='flag-5'>Android</b>、ios動(dòng)態(tài)化】

    鴻蒙ArkUI-X框架開發(fā):【開發(fā)準(zhǔn)備】

    本文檔適用于ArkUI-X框架開發(fā)的初學(xué)者。通過(guò)環(huán)境搭建、代碼下載、代碼編譯、API擴(kuò)展和使用,快速了解平臺(tái)項(xiàng)目開發(fā)流程。
    的頭像 發(fā)表于 05-23 21:02 ?409次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI-X</b>框架<b class='flag-5'>開發(fā)</b>:【<b class='flag-5'>開發(fā)</b>準(zhǔn)備】