# 自定义Android方法给JS调用

创建一个类,将需要提供给JS的方法用@JavascriptInterface标记

import android.util.Log;
import android.webkit.JavascriptInterface;

public class CustomJSBridge {
    @JavascriptInterface
    public void testJSApi(){
        Log.d("CustomJSBridge","来自js的调用");
    }
}
1
2
3
4
5
6
7
8
9

# 方式一

通过MainPageProxygetJSViewParent()获取到JSViewParent对象并调用addJavascriptInterface()

CustomJSBridge customJSBridge = new CustomJSBridge();
// 注意:如果没有调用 mMainPageProxy.onCreate() 拿到的JSViewParent是空的
mMainPageProxy.getJSViewParent().addJavascriptInterface(customJSBridge,"CustomJSBridge");
1
2
3

# 方式二

在Activity里注册MiniApp创建的监听,并添加自定义接口

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mMainPageProxy = new MainPageProxy(this);
    mMainPageProxy.onCreate(savedInstanceState);
    // 调用onCreate之后才能获取到JSViewParent
    mMainPageProxy.getJSViewParent().registerMiniAppLifecycleCallback(new MiniAppLifecycleCallback() {
        @Override
        public void onAppCreate(MiniApp app) {
            // 添加穿透接口
            CustomJSBridge customJSBridge = new CustomJSBridge();
            app.addJavascriptInterface(customJSBridge,"CustomJSBridge");
        }

        @Override
        public void onAppStart(MiniApp app) {

        }

        @Override
        public void onAppStop(MiniApp app) {

        }

        @Override
        public void onAppRelease(MiniApp app) {

        }
    });
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

# 在JS端调用接口

window.CustomJSBridge.testJSApi()
1

# @JavascriptInterface参数支持

  • int: android端为int, js端接收后为int
  • double: android端为double, js端接收后为double
  • 字符串: android端为java.lang.String, js端接收后为String
  • buffer: android端为byte[], js端接收后为 ArrayBuffer, 后续需要js自行转成Uint8Array
  • Js函数句柄: android端为 com.qcode.jsview.JsFuncInvoker, 支持js发送一个回调函数给Java,然后Java去调用此函数
  • Promise: android端为 com.qcode.jsview.JsPromise, 支持一个js端的Promise被Java端的异步回调,注意:此输入必须放到参数表最后
Last Updated: 7/3/2024, 3:53:56 AM