# 拦截即将启动的程序
# 设置拦截监听
JSViewApp 版本1.4.529.20240403
开始支持
// 建议 application 的 onCreate 中调用,这样所有进程都能拦截到。
JSViewApp.getInstance().setStartUpHook(new StartUpHook() {
/**
* 当程序启动小程序时会被调用
* @param startParams 要被启动小程序启动参数
* @param referrer 发起启动的小程序信息
* @param callback 拦截结果回调
*/
@Override
public void onStartMiniApp(MiniAppParams startParams, MiniAppInfo referrer, Common.CommonResultCallback<MiniAppParams> callback) {
Log.d(TAG, "onStartMiniApp: ");
// MiniAppInfo 可以获取到当前小程序的信息
// referrer.getAppName(); // 小程序包名
// referrer.getAppTitle();//小程序应用名
// RETURN_CODE_CONTINUE 表示不拦截,小程序将用 startParams 启动,
// 这里可以自己根据需求调整 startParams 中的参数,比如 更改加载的 url: startParams.setUrl();
// 支持异步: callback不是必须同步调用,可以先异步处理后,回调主线程中再调用
callback.onResult(StartUpHook.RETURN_CODE_CONTINUE,startParams);
// 其余的RETURN_CODE 均会拦截小程序的启动。
// callback.onResult(StartUpHook.RETURN_CODE_SECURE_ERROR, startParams);
}
/**
* 当程序启动原生应用时会被调用
* @param intent 要被启动的原生应用的Intent
* @param referrer 发起启动的小程序信息,如果不是由小程序发起的启动referrer 为 null
* @param callback 拦截结果回调
*/
@Override
public void onStartNativeApp(Intent intent, MiniAppInfo referrer, Common.CommonResultCallback<Intent> callback) {
Log.d(TAG, "onStartNativeApp: ");
// RETURN_CODE_CONTINUE 表示不拦截,将用 intent 启动,这里可以自己根据需求更换 intent
// 支持异步: callback不是必须同步调用,可以先异步处理后,回调主线程中再调用
callback.onResult(StartUpHook.RETURN_CODE_CONTINUE,intent);
// 其余的RETURN_CODE 均会拦截启动。
// callback.onResult(StartUpHook.RETURN_CODE_SECURE_ERROR,intent);
}
});
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
31
32
33
34
35
36
37
38
39
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
31
32
33
34
35
36
37
38
39
关于启动参数MiniAppParams
的文档 请查看 MiniAppParams
# 哪些接口会触发这个拦截
- JS 接口openWindow 会触发
onStartMiniApp
回调 - JS 接口warmUpView 会触发
onStartMiniApp
回调 - JS 接口startUrlInNewTab 会触发
onStartMiniApp
回调 - JS 接口startNativeApp 会触发
onStartNativeApp
回调 - 由外部 intent 启动小程序时(MainPageProxy.onCreate()、MainPageProxy.onNewIntent()),会触发
onStartMiniApp
回调,并且referrer
为空 。
# Java集成时的注意事项
- 关于JSViewApp.getInstance().setStartUpHook的调用时机,主线程中任意时机都可以调用,只要在小程序调用启动其他小程序前注册都可以生效,建议在MainPageProxy.onCreate启动小程序之前进行注册,这样才能把onCreate/onNewIntent启动处理也纳入此回调的处理范围。