平臺橋接開發(fā)指南
平臺橋接用于客戶端(ArkUI)和平臺(Android或iOS)之間傳遞消息,即用于ArkUI與平臺雙向數(shù)據(jù)傳遞、ArkUI側調用平臺的方法、平臺調用ArkUI側的方法。本文主要介紹Android平臺與ArkUI交互,ArkUI側具體用法請參考[Bridge API],Android側參考[BridgePlugin]。
Android平臺與ArkUI交互
開發(fā)前請熟悉鴻蒙開發(fā)指導文檔 :[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]點擊或者復制轉到。
創(chuàng)建平臺橋接
1、在ArkUI側創(chuàng)建平臺橋接。指定名稱,該名稱應與Android側平臺橋接的名稱一致。通過創(chuàng)建的該對象即可調用平臺橋接的方法。
// xxx.ets
// 導入平臺橋接模塊
import bridge from '@arkui-x.bridge';
// 創(chuàng)建平臺橋接實例
const bridgeImpl = bridge.createBridge('Bridge');
2、在Android側創(chuàng)建BridgePlugin類。指定名稱,該名稱應與ArkUI側平臺橋接的名稱一致。通過創(chuàng)建的該對象即可調用平臺橋接的方法。
// xxx.java
Bridge bridge = new Bridge(this, "Bridge", getInstanceId());
場景一:ArkUI側向Android側傳遞數(shù)據(jù)
1、ArkUI側向Android側傳遞數(shù)據(jù)。
// xxx.ets
bridgeImpl.sendMessage('text').then((res)= >{
// 監(jiān)聽Android側的回執(zhí)
console.log('response: ' + res);
}).catch((err) = > {
console.log('error: ' + JSON.stringify(err));
});
2、Android側接收來自ArkUI側的數(shù)據(jù)。
// xxx.java
public Bridge(Context context, String name, int id) {
super(context, name, id);
setMessageListener(this);
}
// 注冊回調,監(jiān)聽ArkUI側的數(shù)據(jù)傳遞
@Override
public Object onMessage(Object data) {
// 返回回執(zhí)給ArkUI側
return "java onMessage success";
}
場景二:Android側向ArkUI側傳遞數(shù)據(jù)
1、Android側向ArkUI側發(fā)送數(shù)據(jù)。
// xxx.java
String[] data = { "message", "from", "android" };
bridge.sendMessage(data);
2、ArkUI側設置回調,用于接收Android側發(fā)送的數(shù)據(jù)。
// xxx.ets
bridgeImpl.setMessageListener((message) = > {
console.log('receive message: ' + message);
// 收到消息后,向Android側發(fā)送回執(zhí)
return "ArkUI reveice message success";
});
3、Android側注冊回調,監(jiān)聽ArkUI側收到數(shù)據(jù)后的回執(zhí)。
// xxx.java
public Bridge(Context context, String name, int id) {
super(context, name, id);
setMessageListener(this);
}
// 注冊回調,監(jiān)聽ArkUI側的回執(zhí)
@Override
public void onMessageResponse(Object data) {}
場景三:ArkUI側調用Android側的方法
1、在ArkUI側調用Android側的方法。
// xxx.ets
bridgeImpl.callMethod('platformCallMethod').then((res)= >{
console.log('result: ' + res);
}).catch((err) = > {
console.error('error: ' + JSON.stringify(err));
});
2、在Android側實現(xiàn)被調用的方法。
// xxx.java
public platformCallMethod() {
return "call java platformCallMethod success";
}
場景四:Android側調用ArkUI側的方法
1、注冊ArkUI側方法,供Android側調用。
// xxx.ets
function getString() {
return 'call js getString success';
}
bridgeImpl.registerMethod({ name: 'getString', method: getString });
2、Android側調用ArkUI側的方法。
Object[] paramObject = {};
MethodData methodData = new MethodData("getString", paramObject);
bridge.callMethod(methodData);
場景五:ArkUI側監(jiān)聽Android側的方法
1、注冊ArkUI側方法,供Android側調用。
// xxx.ets
bridgeImpl.registerMethod({ name: 'getString', method: getString });
2、移除已注冊的ArkUI側方法。
// xxx.ets
bridgeImpl.unRegisterMethod('getString');
3、在Android側注冊回調,監(jiān)聽方法注冊、注銷。
// 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) {}
場景示例
本場景展示了當ArkUI頁面啟動時,調用Android側方法,并將Android側方法的返回值顯示在頁面上。點擊按鈕,ArkUI側發(fā)送數(shù)據(jù)到Android側,Android側收到數(shù)據(jù)后,返回回執(zhí)數(shù)據(jù),并將回執(zhí)數(shù)據(jù)顯示在頁面上。
ArkUI側
編寫ArkUI頁面Index.ets。
// Index.ets
// 導入平臺橋接模塊
import bridge from '@arkui-x.bridge';
@Entry
@Component
struct Index {
// 創(chuàng)建平臺橋接對象
private bridgeImpl = bridge.createBridge('Bridge');
@State helloArkUI: string = '';
@State nativeResponse: string = '';
aboutToAppear() {
this.getHelloArkUI();
}
getHelloArkUI() {
// 調用Android側方法
this.bridgeImpl.callMethod('getHelloArkUI').then((result: string) = > {
// 通過狀態(tài)變量,將Android側方法的返回值顯示在頁面上
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側,并通過狀態(tài)變量,將Android側的響應數(shù)據(jù)顯示在頁面上
this.nativeResponse = await this.bridgeImpl.sendMessage('Hello ArkUI-X!');
})
Text('Response from Native: ' + this.nativeResponse)
.fontSize(15)
.margin(10)
}
.width('100%')
}
.height('100%')
}
}
Android側
// Bridge.java
package com.example.bridgestage;
import android.content.Context;
// 引用平臺橋接模塊
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側方法,供ArkUI側調用
public String getHelloArkUI() {
return "Hello ArkUI!";
}
// 注冊回調,接收ArkUI側發(fā)來的數(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側同名的平臺橋接,即可用于消息傳遞
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
+關注
關注
80文章
2141瀏覽量
34905 -
OpenHarmony
+關注
關注
31文章
3891瀏覽量
20153 -
鴻蒙OS
+關注
關注
0文章
191瀏覽量
5229
發(fā)布評論請先 登錄
鴻蒙ArkUI-X跨語言調用說明:【平臺橋接開發(fā)指南(Android)Bridge API】

鴻蒙ArkUI-X跨語言調用說明:【平臺橋接開發(fā)指南(Android)BridgePlugin】

ArkUI-X開發(fā)指南:【SDK配置和構建說明】

ArkUI-X在Android平臺動態(tài)化開發(fā)指南
ArkUI-X與Android聯(lián)動編譯開發(fā)指南
ArkUI-X跨平臺應用改造指南
ArkUI-X跨平臺技術落地-華為運動健康(一)
資訊速遞 | ArkUI-X 預覽版已正式開源!
鴻蒙ArkUI-X跨語言調用說明:平臺差異化【Android、ios動態(tài)化】

評論