平台桥接用于客户端(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<string>, p2: Array<number>, p3: Array<boolean>) : 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<string, string>, p2: Record<string, number>, p3: Record<string, boolean>) : 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<String, String> map1 = new HashMap<>();
- map1.put("one", "hello");
- map1.put("two", "world");
- Map<String, Integer> map2 = new HashMap<>();
- map2.put("one", 1);
- map2.put("two", 2);
- Map<String, Boolean> 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);
- }
- });
- }
- }
复制代码 来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |