android 和 js 交互

1.html代码

<script type="text/javascript">
    function javacalljs(){
         document.getElementById("content").innerHTML = "JAVA调用了JS的无参函数";
    }
    function javacalljswith(arg){
         document.getElementById("content").innerHTML = (arg);
    }
</script> 
<input type="button" value="点击调用java代码" onclick="window.android1.jsCall()" /> 
<input type="button" value="点击调用java代码并传递参数" onclick="window.android1.jsCall('paramsvalue')" />  

2.java代码

import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import android.widget.Toast;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

/**
 * Android  和 js 的互相调用
 * 布局文件为 2个 button,一个WebView
 */
public class ActivityWebView extends Activity {
    @BindView(R.id.webView)
    WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ble);
        ButterKnife.bind(this);

        webView.loadUrl("http://192.168.61.104:8080/update/android_js.html");
        webView.getSettings().setJavaScriptEnabled(true);// 启用javascript
        webView.addJavascriptInterface(this, "android1"); // android1 为html中的别名
    }

    /**
     * 被js调用的函数
     */
    @JavascriptInterface
    public void jsCall() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(ActivityWebView.this, "无参数的方法被js调用", Toast.LENGTH_SHORT).show();
            }
        });
    }

    /**
     * 被js调用的函数 jsCall
     * jsCall这个为html中的函数名字
     * 必须加上     @JavascriptInterface 这个注解
     */
    @JavascriptInterface
    public void jsCall(final String params) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                new AlertDialog.Builder(ActivityWebView.this).setMessage(params).show();
            }
        });
    }

    @OnClick(R.id.btn0)
    public void btn0() {
        webView.loadUrl("javascript:javacalljs()");// 调用无参的js:  javacalljs 为js的函数名
    }

    @OnClick(R.id.btn1)
    public void btn1() {
        String params = "params";// 调用有参的js:  javacalljswith 为js的函数名,params 为参数值
        webView.loadUrl("javascript:javacalljswith('" + params + "')");
    }
}

参考: http://blog.csdn.net/leejizhou/article/details/50894531/

原文地址:https://www.cnblogs.com/Westfalen/p/6952341.html