# 自定义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
2
3
4
5
6
7
8
9
# 方式一
通过MainPageProxy的getJSViewParent()获取到JSViewParent对象并调用addJavascriptInterface()
CustomJSBridge customJSBridge = new CustomJSBridge();
// 注意:如果没有调用 mMainPageProxy.onCreate() 拿到的JSViewParent是空的
mMainPageProxy.getJSViewParent().addJavascriptInterface(customJSBridge,"CustomJSBridge");
 1
2
3
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
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端的异步回调,注意:此输入必须放到参数表最后 
 
← JS如何调用Android方法 简介 →