js 如何调用android

项目内有单独的html文件
如何在该文件内用js来调取 原生的 android

这边自己写的代码如下
麻烦各位大佬指点下

MainActivity.java

 protected void onCteate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        WebView wv;
        wv = (WebView)findViewById(R.id.webView);
        wv.getSettings().setJavaScriptEnabled(true);

        wv.loadUrl("file:///assets/apps/5yan/www/main-openDoor.html");

        wv.addJavascriptInterface(new WebAppInterface(this), "Android");
    }
    public class WebAppInterface {
        Context mContext;


        WebAppInterface(Context c) {
            mContext = c;
        }


        @JavascriptInterface
        public void showToast(String toast) {
            Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
        }
    }

js如下

        <input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" />

            <script type="text/javascript">
                function showAndroidToast(toast) {
                    Android.showToast(toast);
                }
            </script>

html路径如图

图片描述

阅读 4.1k
4 个回答

官方文档有介绍可以参考下:
https://developer.android.goo...

在APP中暴露一个接口:

public class WebAppInterface {
    Context mContext;

    /** Instantiate the interface and set the context */
    WebAppInterface(Context c) {
        mContext = c;
    }

    /** Show a toast from the web page */
    @JavascriptInterface
    public void showToast(String toast) {
        Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
    }
}

添加到 WebView:

WebView webView = (WebView) findViewById(R.id.webview);
webView.addJavascriptInterface(new WebAppInterface(this), "Android");

在 HTML 中调用:

<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" />

<script type="text/javascript">
    function showAndroidToast(toast) {
        Android.showToast(toast);
    }
</script>

补充:
加载 Assets 文件应该使用 android_asset,而不是 assets
wv.loadUrl("file:///android_asset/{path}");

在js中调用的代码会在非主线程执行,show Toast是需要在主线程执行的,不然会抛异常,webview调试可以在pc版chrome中输入chrome://inspect/#devices

安卓那边暴露一个对象,然后给对象填充方法。前端这边就可以用这个对象中的方法

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题