js调用android
1.创建js需要调用的java方法
import android.util.Log;
import android.webkit.JavascriptInterface;
public class JsFun {
@JavascriptInterface
public void fun1() {
Log.d("js", "fun1");
}
@JavascriptInterface
public void fun2() {
Log.d("js", "fun2");
}
}
2.创建html文件
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<button onclick="clickBtn()">调用js</button>
<script>
function clickBtn(){
test.fun1();
}
</script>
</body>
</html>
3.创建webview,并将java方法绑定到webview
public class SecondActivity extends AppCompatActivity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_second);
webView = findViewById(R.id.second_wv);
WebSettings webSettings = webView.getSettings();
webView.getSettings().setJavaScriptEnabled(true);
webSettings.setAllowFileAccess(true);
webSettings.setAllowFileAccessFromFileURLs(true);
webSettings.setAllowContentAccess(true);
webSettings.setDomStorageEnabled(true);
webView.getSettings().setAllowFileAccessFromFileURLs(true);
webView.loadUrl("file:///android_asset/dist/index.html");
webView.addJavascriptInterface(new JsFun(), "test");
}
}
总结:webView.addJavascriptInterface(new JsFun(), "test")这句代码相当于在js内部创建了一个新的对象test,为这个对象添加了一个方法fun1,所以js可以直接调用test.fun1()
js调用android 传参
function funString1(){
jsCallAndroid.funString1("hello");
}
function funString2(){
jsCallAndroid.funString2("hello", "world");
}
function funInt(){
jsCallAndroid.funInt(5);
}
function funBool1(){
jsCallAndroid.funBool1(true);
}
function funBool2(){
jsCallAndroid.funBool2(false);
}
@JavascriptInterface
public void fun2() {
Log.d("js", "fun2");
}
@JavascriptInterface
public void funString1(String s) {
Log.d("js", "funString:" + s);
}
@JavascriptInterface
public void funString2(String s1, String s2) {
Log.d("js", "funString:" + s1 + "," + s2);
}
@JavascriptInterface
public void funInt(int a) {
Log.d("js", "funInt:" + a);
}
@JavascriptInterface
public void funBool1(boolean a) {
Log.d("js", "funInt:" + a);
}
@JavascriptInterface
public void funBool2(boolean a) {
Log.d("js", "funInt:" + a);
}
js调用android 获取返回值
function funRet(){
var ret = jsCallAndroid.funRet();
jsCallAndroid.funString1(ret);
}
@JavascriptInterface
public String funRet() {
Log.d("js", "funRet");
return "i am return";
}
Android调用JS
// 获取返回值
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 只需要将第一种方法的loadUrl()换成下面该方法即可
webView.evaluateJavascript("javascript:callJs1()", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
Log.d("js", "onReceiveValue: " + value);
}
});
}
});
// 传字符串
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 只需要将第一种方法的loadUrl()换成下面该方法即可
webView.evaluateJavascript("javascript:callJs2('hahha')", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
Log.d("js", "onReceiveValue: " + value);
}
});
}
});
final String script = "javascript:callJs3({'name':'zhang','age':'18'})";
// 传对象
btn3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 只需要将第一种方法的loadUrl()换成下面该方法即可
webView.evaluateJavascript(script, new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
Log.d("js", "onReceiveValue: " + value);
}
});
}
});