准备html文件
test.xml
<!DOCTYPE html>
<html>
<head>
<title></title>
<script type="text/javascript">
function sum(a,b){
return a+b;
}
function s(){
var result =window.android.back();
document.getElementById("p").innerHTML=result;
}
</script>
</head>
<body>
<button onclick="s()">调用本地方法</button>
<a href="file:///android_asset/test2.html">点击</a>
<p id="p"></p>
</body>
</html>
希望你能看得懂,看不懂也没事,写h5前端的人应该懂的
把它扔到assents文件夹下即可
WebActivity
public class MainActivity extends AppCompatActivity {
public static final String TAG = "MainActivity";
private WebView mWebView;
private TextView tv_app_to_h5;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWebView = (WebView) findViewById(R.id.webView);
tv_app_to_h5 = findViewById(R.id.tv_app_to_h5);
//加载本地asset下的test.html
mWebView.loadUrl("file:///android_asset/test.html");
WebSettings webSettings = mWebView.getSettings();
//这个必须
webSettings.setJavaScriptEnabled(true);
//后面的android 是要和html的window.android.back() 中间的android名一样(可以改为任意名,一致就好),后面的back()就是Android端定的方法
mWebView.addJavascriptInterface(new JsInteration(), "android");
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.equals("file:///android_asset/test2.html")) {
//拦截点击事件
Log.e(TAG, "shouldOverrideUrlLoading: " + url);
//startActivity(new Intent(MainActivity.this,Main2Activity.class));
return true;
} else {
mWebView.loadUrl(url);
return false;
}
}
});
tv_app_to_h5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//app调h5方法示例
mWebView.evaluateJavascript("sum(1,2)", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
//h5返回的结果给app
Log.e(TAG, "onReceiveValue value=" + value);
}
});
}
});
}
//h5调app方法示例
public class JsInteration {
@JavascriptInterface
public String back() {
Log.e(TAG, "back");
//app返回结果给h5
return "hello world";
}
}
}
布局文件就不写了。看代码注释基本也懂了,关键在于配合。可以把这篇文章转发给前端看。
顺便说一下:如果发现互相传值看不到或者出错,请都用String类型来定义
网友评论