ArkUI-X与Android桥接通信之方法回调

B站影视 欧美电影 2025-06-08 22:55 2

摘要:平台桥接用于客户端(ArkUI)和平台(Android或iOS)之间传递消息,即用于ArkUI与平台双向数据传递、ArkUI侧调用平台的方法、平台调用ArkUI侧的方法。本文主要介绍Android平台与ArkUI交互,ArkUI侧具体用法请参考Bridge A

平台桥接用于客户端(ArkUI)和平台(Android或iOS)之间传递消息,即用于ArkUI与平台双向数据传递、ArkUI侧调用平台的方法、平台调用ArkUI侧的方法。本文主要介绍Android平台与ArkUI交互,ArkUI侧具体用法请参考Bridge API,Android侧参考BridgePlugin。

ArkUI侧调用Android侧的方法

1.在ArkUI侧调用Android侧的方法。

// xxx.ets private bridgeImpl = bridge.createBridge('Bridge'); this.bridgeImpl.callMethod('platformCallMethod').then((res)=>{ console.log('result: ' + res); }).catch((err: Error) => { console.error('error: ' + JSON.stringify(err)); });

2.在Android侧实现被调用的方法。

// xxx.java public String platformCallMethod { return "call java platformCallMethod success"; }

Android侧调用ArkUI侧的方法

1.注册ArkUI侧方法,供Android侧调用。

// xxx.ets private bridgeImpl = bridge.createBridge('Bridge'); private getString : bridge.ResultValue { return 'call js getString success'; } this.bridgeImpl.registerMethod({ name: 'getString', method: this.getString });

2.Android侧调用ArkUI侧的方法。

// 方式一: 构造ArkUI侧方法描述对象实例调用 Object paramObject = {}; MethodData methodData = new MethodData("getString", paramObject); bridge.callMethod(methodData); // 方式二: ArkUI侧函数名加ArkUI侧方法形参对应的实参调用 bridge.callMethod("getString");

ArkUI侧监听Android侧的方法

1.注册ArkUI侧方法,供Android侧调用。

// xxx.ets private bridgeImpl = bridge.createBridge('Bridge'); private getString : bridge.ResultValue { return 'call js getString success'; } this.bridgeImpl.registerMethod({ name: 'getString', method: this.getString });

2.移除已注册的ArkUI侧方法。

// xxx.ets bridgeImpl.unRegisterMethod('getString');

3.在Android侧注册回调,监听方法注册、注销。

// xxx.java public Bridge(Context context, String name, int id) { super(context, name, id); } public Bridge(Context context, String name, BridgeManager bridgeManager) { super(context, name, bridgeManager); 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侧注册callBack且调用Android侧的方法(无参)

1.在ArkUI侧注册callBack且调用Android侧的方法。

// xxx.ets function testCallBackOfJs { console.log("bridge js testCallBackOfJs run") } this.bridgeCodec.callMethodWithCallBack("testCallBack", testCallBackOfJs).then((res)=>{ console.log('result: ' + res); }).catch((err) => { console.error('error: ' + JSON.stringify(err)); });

2.在Android侧实现被调用的方法,调用ArkUI侧的方法。

// xxx.java public String testCallBack { return "call android testCallBack success"; } Object paramObject = {}; MethodData methodData = new MethodData("testCallBack", paramObject); bridge.callMethod(methodData);

ArkUI侧注册callBack且调用Android侧的方法(有参)

1.在ArkUI侧注册callBack且调用Android侧的方法。

// xxx.ets function testCallBackOfJs(stringParam) { console.log("Js received a parameter of " + stringParam) return "js testCallBackReturn call success." } this.bridgeCodec.callMethodWithCallBack("testCallBack", testCallBackOfJs, "js sends parameter").then((res)=>{ console.log('result: ' + res); }).catch((err) => { console.error('error: ' + JSON.stringify(err)); });

2.在Android侧实现被调用的方法,调用ArkUI侧的方法。

// xxx.java public String testCallBack(String sParam) { ALog.i("Android received a parameter of ", sParam); return "call android testCallBack success"; } Object paramObject = {"android sends parameter"}; MethodData methodData = new MethodData("testCallBack", paramObject); bridge.callMethod(methodData);

callMethod不同数据类型

import bridge from '@arkui-x.bridge' @Entry @Component struct Index { @State bridgeImpl: bridge.BridgeObject = bridge.createBridge("BridgeName"); private funTest(p1: string, p2: number, p3: boolean) : bridge.ResultValue { console.info('Java->Ts bridge funTest p1 is ' + p1); console.info('Java->Ts bridge funTest p2 is ' + p2); console.info('Java->Ts bridge funTest p3 is ' + p3); return "call success" } private funTestArray(p1: Array, p2: Array, p3: Array) : bridge.ResultValue { console.log('Java->Ts bridge funTestArray p1 is ' + p1.toString); console.log('Java->Ts bridge funTestArray p2 is ' + p2.toString); console.log('Java->Ts bridge funTestArray p3 is ' + p3.toString); return "call success" } private funTestRecord(p1: Record, p2: Record, p3: Record) : bridge.ResultValue { console.log('Java->Ts bridge funTestRecord p1 is ' + p1.toString); console.log('Java->Ts bridge funTestRecord p2 is ' + p2.toString); console.log('Java->Ts bridge funTestRecord p3 is ' + p3.toString); return "call success" } onPageShow { // Register ArkUI侧 functions this.bridgeImpl.registerMethod({name: "funTest", method: this.funTest}); this.bridgeImpl.registerMethod({name: "funTestArray", method: this.funTestArray}); this.bridgeImpl.registerMethod({name: "funTestRecord", method: this.funTestRecord}); } build { Row { Column { } .width('100%') } .height('100%') } }

// EntryEntryAbilityActivity.java package com.example.androidTestDemo; import android.os.Bundle; import android.view.View; import android.widget.Button; import java.util.HashMap; import java.util.Map; import ohos.ace.adapter.capability.bridge.BridgePlugin; import ohos.ace.adapter.capability.bridge.MethodData; import ohos.stage.ability.adapter.StageActivity; public class EntryEntryAbilityActivity extends StageActivity { private BridgeImpl bridgeImpl = null; @Override protected void onCreate(Bundle savedInstanceState) { bridgeImpl = new BridgeImpl(this, "BridgeName", getBridgeManager); setInstanceName("com.example.basebridge:entry:EntryAbility:"); super.onCreate(savedInstanceState); // 显示应用程序界面布局(在项目的 res/layout 目录下,添加main_activity.xml文件) setContentView(R.layout.main_activity); // 注册按钮 testCallMethod1; testCallMethod2; testCallMethod3; } public void testCallMethod1 { // 使用button按钮点击,发送信息。 Button button = (Button) findViewById(R.id.TestCallMethod1); button.setOnClickListener(new View.OnClickListener { @Override public void onClick(View v) { // 定义对象数组,存放ArkUI侧方法形参对应的实参 Object paramObject = { "param1", 1, true}; // 方式一: 构造ArkUI侧方法描述对象实例调用 MethodData methodData = new MethodData("funTest", paramObject); bridgeImpl.callMethod(methodData); // 方式二: ArkUI侧函数名加ArkUI侧方法形参对应的实参调用 bridgeImpl.callMethod("funTest", "param1", 1, true); } }); } public void testCallMethod2 { // 使用button按钮点击,发送信息。 Button button = (Button) findViewById(R.id.TestCallMethod2); button.setOnClickListener(new View.OnClickListener { @Override public void onClick(View v) { // 定义对象数组,存放ArkUI侧方法形参对应的实参 String sArray = {"hello", "world"}; int iArray = {123, 456}; boolean bArray = {true, false}; Object paramObject = {sArray, iArray, bArray}; // 方式一: 构造ArkUI侧方法描述对象实例调用 MethodData methodData = new MethodData("funTestArray", paramObject); bridgeImpl.callMethod(methodData); // 方式二: ArkUI侧函数名加ArkUI侧方法形参对应的实参调用 bridgeImpl.callMethod("funTestArray", sArray, iArray, bArray); } }); } public void testCallMethod3 { // 使用button按钮点击,发送信息。 Button button = (Button) findViewById(R.id.TestCallMethod3); button.setOnClickListener(new View.OnClickListener { @Override public void onClick(View v) { // 定义对象数组,存放ArkUI侧方法形参对应的实参 Map map1 = new HashMap; map1.put("one", "hello"); map1.put("two", "world"); Map map2 = new HashMap; map2.put("one", 1); map2.put("two", 2); Map map3 = new HashMap; map3.put("one", true); map3.put("two", false); Object paramObject = {map1, map2, map3}; // 方式一: 构造ArkUI侧方法描述对象实例调用 MethodData methodData = new MethodData("funTestRecord", paramObject); bridgeImpl.callMethod(methodData); // 方式二: ArkUI侧函数名加ArkUI侧方法形参对应的实参调用 bridgeImpl.callMethod("funTestRecord", map1, map2, map3); } }); } }

来源:龙儿筝

相关推荐