平臺(tái)橋接開(kāi)發(fā)指南
平臺(tái)橋接用于客戶端(ArkUI)和平臺(tái)(Android或iOS)之間傳遞消息,即用于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交互
開(kāi)發(fā)前請(qǐng)熟悉鴻蒙開(kāi)發(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)橋接。指定名稱(chēng),該名稱(chēng)應(yīng)與Android側(cè)平臺(tái)橋接的名稱(chēng)一致。通過(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類(lèi)。指定名稱(chēng),該名稱(chēng)應(yīng)與ArkUI側(cè)平臺(tái)橋接的名稱(chēng)一致。通過(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)聽(tīng)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)聽(tīng)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)聽(tīng)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)聽(tīng)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)聽(tīng)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)聽(tīng)方法注冊(cè)、注銷(xiāo)。
// 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è)
編寫(xiě)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);
}
}
`HarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿`
// MyApplication.java
package com.example.bridgestage;
import ohos.stage.ability.adapter.StageApplication;
public class MyApplication extends StageApplication {
@Override
public void onCreate() {
super.onCreate();
}
}
-
HarmonyOS
+關(guān)注
關(guān)注
79文章
2052瀏覽量
32109 -
OpenHarmony
+關(guān)注
關(guān)注
26文章
3820瀏覽量
18113 -
鴻蒙OS
+關(guān)注
關(guān)注
0文章
191瀏覽量
4873
發(fā)布評(píng)論請(qǐng)先 登錄
鴻蒙ArkUI-X跨平臺(tái)開(kāi)發(fā):【命令行工具(ACE Tools)】

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

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

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

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

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

ArkUI-X跨平臺(tái)框架接入指南
ArkUI-X添加到現(xiàn)有Android項(xiàng)目中
資訊速遞 | ArkUI-X 預(yù)覽版已正式開(kāi)源!
鴻蒙ArkUI-X跨平臺(tái)技術(shù):【開(kāi)發(fā)準(zhǔn)備】

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

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

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

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

評(píng)論