平臺(tá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交互
開發(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);
}
}
`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文章
1966瀏覽量
29962 -
OpenHarmony
+關(guān)注
關(guān)注
25文章
3635瀏覽量
16061 -
鴻蒙OS
+關(guān)注
關(guān)注
0文章
188瀏覽量
4359
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論