Android开发中JS调用原生代码

今天遇到一个需求,项目中原来的原生界面要改为H5,但是这个这个界面中的某些点击事件还是要在原生代码里去处理,这就需要我们在JS中调用Android原生代码,正好趁着今天做了这个需求,写个简单的例子,把这个问题总结一下:

第一步:显示WebView

private JavaScriptUtil mJavaScriptUtil;//Js调用原生的工具类,为了以后书写方便,可以将项目中所有调原生的方法都写在一起  当然这里我们只举一个例子

         WebView webView = findViewById(R.id.web_view);
        webView.getSettings().setJavaScriptEnabled(true);//支持Js
        mJavaScriptUtil = new JavaScriptUtil(WebViewActivity.this);//只是为了将当前Activity的上下文环境,传入工具类,为了在工具类中启动一个Activity(当然这个根据实际情况去加)
        webView.addJavascriptInterface(mJavaScriptUtil, "jsAlias");//这个是上面工具类对象的实例  第二个是在js中调用的别名,这个需要和前端人员商定
        // webView.loadUrl("https://www.baidu.com/");
        webView.loadUrl("file:///android_asset/webview.html");//加载本地html文件

第二步:JavaScriptUtil工具类

public class JavaScriptUtil {

    private Context mContext;

    public JavaScriptUtil(Context mContext) {
        this.mContext = mContext;
    }

    @JavascriptInterface
    public void receiveByJs(String text, int count) {//receiveByJs 这个方法是接收来自H5的点击事件,同样方法名是自定义,但是要和前端商定
        Toast.makeText(mContext, count + text + "", Toast.LENGTH_SHORT).show();//这一句,就是测试从H5页面带来的数据
        mContext.startActivity(new Intent(mContext, MainActivity.class));//Activity跳转
    }

第三步:本地html文件,里面代码很简单,其中要注意jsAlias.receiveByJs(“测试数据1”,2)中的jsAlias和receiveByJs都是我们在Android原生代码中自定义的,使用时Android的代码和html中的代码要统一,不然不会生效




    
    Insert title here
    


Js调用原生代码

点击事件

了解以上三步后,就可以实现在JS中去调用Android原生代码了,在代码里我已经注释了很多,可以看看。但是里面有一些规则,最好自己写一个例子去理解,这样会更加深刻。

如果有错的或者说的不准确的地方,请联系我,及时改正,谢谢大家

你可能感兴趣的:(Android开发)