最近在项目中遇到Android和JS的交互问题,第一次做,我和H5调了好几次,才调试好。泪奔ING
在这里记录一个Demo,防止以后忘记,小伙伴们也可以借鉴一下,有什么不对的,欢迎指正。(你可以说,我不一定听)
1.首先介绍一下,我用的是AgentWeb这个加载WebView的框架
AgentWeb 是一个高度封装的 Android WebView ,简单易用 , 带有进度条 、 支持文件上传 、 下载 、 简化 Javascript 通信 ,加强 Web 安全的库 。
// webview加载框架的依赖
implementation'com.just.agentweb:agentweb:4.0.2' // (必选)
implementation'com.just.agentweb:download:4.0.2' // (可选)
implementation'com.just.agentweb:filechooser:4.0.2'// (可选)
具体我就不多做介绍了,你们去百度一下一大堆。我们主要介绍和JS交互的问题。
2.先准备一个html文件放在src_main下的assets文件下
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Carson_Ho</title>
// JS代码
<script>
// Android需要调用的方法
function callJS(){
alert("Android调用了JS的callJS方法");
}
</script>
</head>
</html>
3.android加载H5
好了接下来才是重头戏,注意了不要眨眼睛
4.Android调用JS
mAgentWeb.getJsAccessEntrace().quickCallJs("callJS");
callJS 是H5写的方法,你要和H5的小伙伴商量好哦,不然就真是狗带了
5.JS调用Android
这个的话,我们只需要给H5的小伙伴留一下方法。需要两步
第一:写一个接口,在接口给H5留方法
public class AndroidInterface {
private AgentWeb agent;
private Context context;
public AndroidInterface(AgentWeb agent, Context context) {
this.agent = agent; this.context = context;
}
@JavascriptInterface
public String getAndroid() {
return "Android";
}
}
第二:把接口设置进去
mAgentWeb.getJsInterfaceHolder().addJavaObject("android", new AndroidInterface(mAgentWeb, this));
最后:JS通过下面的方法调用,就OK了
window.android.callAndroid();
完事了,第一次分享,希望可以帮助遇到这类问题的童鞋。