Android开发app与web(h5)交互,点我点我

准备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类型来定义

参考文档:https://www.jianshu.com/p/a25907862523

推荐阅读更多精彩内容