# 自定义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方法 简介 →