原文地址:https://www.imooc.com/article/70143?block_id=tuijian_wz
https://www.jianshu.com/p/c80ceb1ff417?from=groupmessage
1.项目build.gradle
allprojects {
repositories {
google()
jcenter()
maven { url "https://jitpack.io" }
}
}
2.添加依赖
implementation 'com.github.lzyzsd:jsbridge:1.0.4'
3.布局引用
<com.github.lzyzsd.jsbridge.BridgeWebView
android:id="@+id/mY_bridge"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
4.给js提供方法(按方法名接收)
/**
* 提供给JS调用的方法 //TODO 最常用的
* */
bridgeWebView.registerHandler("camera", new BridgeHandler() {//camera :方法名
@Override
public void handler(String data, CallBackFunction function) {
if (!TextUtils.isEmpty(data)) {
Log.e(log, "接收到JS的数据====camera====" + data);
Toast.makeText(MainActivity.this, "接收到JS的数据====camera====" + data, Toast.LENGTH_SHORT).show();
//给JS回传的数据
function.onCallBack("收到JS调用相机需求,一拍照,返回照片地址,收到了么666666666666666666");
} else {
Toast.makeText(MainActivity.this, "JS传参为空", Toast.LENGTH_SHORT).show();
}
}
});
4.1.js使用方法
/**
*js调用方式
* */
// window.WebViewJavascriptBridge.callHandler(
// 'camera' //方法名
// , {'appKey':appKey, 'appSecret':secret} //给移动端的值
// ,function(responseData) {//移动端回传的数据
// alert(responseData);
// document.getElementById('location').innerHTML = responseData;
// }
//);
5.给js提供方法(默认接收)
bridgeWebView.setDefaultHandler(new BridgeHandler() {
@Override
public void handler(String data, CallBackFunction function) {
if (!TextUtils.isEmpty(data)) {
Log.e(log, "接收到JS的数据========" + data);
// 给JS回传的数据
function.onCallBack("要返回给JS的数据");
} else {
Toast.makeText(MainActivity.this, "JS传参为空", Toast.LENGTH_SHORT).show();
}
}
});
5.1。js使用方法
WebViewJavascriptBridge.send(
data, //参数
function(responseData){ //java中DefaultHandler所实现的方法中callback所定义的入参
}
)
6;js给android提供方法(指定方法接收) js需要初始化
//注册事件监听,初始化
function setupWebViewJavascriptBridge(callback) {
if (window.WebViewJavascriptBridge) {
callback(WebViewJavascriptBridge)
} else {
document.addEventListener(
'WebViewJavascriptBridgeReady'
, function() {
callback(WebViewJavascriptBridge)
},
false
);
}
}
//指定接收,参数functionInJs 与java保持一致
bridge.registerHandler("fangfaming", function(data, responseCallback) {
document.getElementById("show").innerHTML = '指定接收到Java的数据: ' + data;
var responseData = 'js指定接收完毕,并回传数据给java';
responseCallback(responseData); //回传数据给java
});
6.(1)android接收方法
bridgeWebView.callHandler("fangfaming", "传给JS的值", new CallBackFunction() {
@Override
public void onCallBack(String data) {
if (!TextUtils.isEmpty(data)) {
Log.e(log, "JS返回的值=====" + data);
}
}
});
6.2;js给android提供方法(默认接收)
//默认接收
bridge.init(function(message, responseCallback) {
document.getElementById("show").innerHTML = '默认接收到Java的数据: ' + message;
var responseData = 'js默认接收完毕,并回传数据给java';
responseCallback(responseData); //回传数据给java
});
6.2.2 android 接收方法
bridgeWebView.send("发送给JS默认接受的值", new CallBackFunction() {
@Override
public void onCallBack(String data) {
if (!TextUtils.isEmpty(data)) {
Log.e(log, "JS返回的值=====" + data);
}
}
});
别忘了加上网络权限
webview启动 JavaScript
bridgeWebView.getSettings().setJavaScriptEnabled(true); //启用 JavaScript
点我跳转到git地址