平臺橋接開發指南
平臺橋接用于客戶端(ArkUI)和平臺(Android或iOS)之間傳遞消息,即用于ArkUI與平臺雙向數據傳遞、ArkUI側調用平臺的方法、平臺調用ArkUI側的方法。本文主要介紹Android平臺與ArkUI交互,ArkUI側具體用法請參考[Bridge API],Android側參考[BridgePlugin]。
Android平臺與ArkUI交互
開發前請熟悉鴻蒙開發指導文檔 :[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]點擊或者復制轉到。
創建平臺橋接
1、在ArkUI側創建平臺橋接。指定名稱,該名稱應與Android側平臺橋接的名稱一致。通過創建的該對象即可調用平臺橋接的方法。
// xxx.ets
// 導入平臺橋接模塊
import bridge from '@arkui-x.bridge';
// 創建平臺橋接實例
const bridgeImpl = bridge.createBridge('Bridge');
2、在Android側創建BridgePlugin類。指定名稱,該名稱應與ArkUI側平臺橋接的名稱一致。通過創建的該對象即可調用平臺橋接的方法。
// xxx.java
Bridge bridge = new Bridge(this, "Bridge", getInstanceId());
場景一:ArkUI側向Android側傳遞數據
1、ArkUI側向Android側傳遞數據。
// xxx.ets
bridgeImpl.sendMessage('text').then((res)= >{
// 監聽Android側的回執
console.log('response: ' + res);
}).catch((err) = > {
console.log('error: ' + JSON.stringify(err));
});
2、Android側接收來自ArkUI側的數據。
// xxx.java
public Bridge(Context context, String name, int id) {
super(context, name, id);
setMessageListener(this);
}
// 注冊回調,監聽ArkUI側的數據傳遞
@Override
public Object onMessage(Object data) {
// 返回回執給ArkUI側
return "java onMessage success";
}
場景二:Android側向ArkUI側傳遞數據
1、Android側向ArkUI側發送數據。
// xxx.java
String[] data = { "message", "from", "android" };
bridge.sendMessage(data);
2、ArkUI側設置回調,用于接收Android側發送的數據。
// xxx.ets
bridgeImpl.setMessageListener((message) = > {
console.log('receive message: ' + message);
// 收到消息后,向Android側發送回執
return "ArkUI reveice message success";
});
3、Android側注冊回調,監聽ArkUI側收到數據后的回執。
// xxx.java
public Bridge(Context context, String name, int id) {
super(context, name, id);
setMessageListener(this);
}
// 注冊回調,監聽ArkUI側的回執
@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側實現被調用的方法。
// 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側監聽Android側的方法
1、注冊ArkUI側方法,供Android側調用。
// xxx.ets
bridgeImpl.registerMethod({ name: 'getString', method: getString });
2、移除已注冊的ArkUI側方法。
// xxx.ets
bridgeImpl.unRegisterMethod('getString');
3、在Android側注冊回調,監聽方法注冊、注銷。
// 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側發送數據到Android側,Android側收到數據后,返回回執數據,并將回執數據顯示在頁面上。
ArkUI側
編寫ArkUI頁面Index.ets。
// Index.ets
// 導入平臺橋接模塊
import bridge from '@arkui-x.bridge';
@Entry
@Component
struct Index {
// 創建平臺橋接對象
private bridgeImpl = bridge.createBridge('Bridge');
@State helloArkUI: string = '';
@State nativeResponse: string = '';
aboutToAppear() {
this.getHelloArkUI();
}
getHelloArkUI() {
// 調用Android側方法
this.bridgeImpl.callMethod('getHelloArkUI').then((result: string) = > {
// 通過狀態變量,將Android側方法的返回值顯示在頁面上
this.helloArkUI = result;
});
}
build() {
Row() {
Column() {
Text(this.helloArkUI)
.fontSize(15)
.margin(10)
Button('sendMessage')
.fontSize(15)
.margin(10)
.onClick(async () = > {
// 發送數據到Android側,并通過狀態變量,將Android側的響應數據顯示在頁面上
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側發來的數據
@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文章
2153瀏覽量
36051 -
OpenHarmony
+關注
關注
33文章
3952瀏覽量
21102 -
鴻蒙OS
+關注
關注
0文章
193瀏覽量
5485
發布評論請先 登錄
鴻蒙ArkUI-X跨語言調用說明:【平臺橋接開發指南(Android)Bridge API】
鴻蒙ArkUI-X跨語言調用說明:【平臺橋接開發指南(Android)BridgePlugin】
鴻蒙ArkUI-X跨語言調用說明:【平臺橋接開發指南(Android)】
評論