常用的Js调Android方法,以及Android原生传值给Js

最近公司弄点这样的需求,我借此机会学习重新温故了一下,Js掉用android原生的方法 还有把值传回给js的方法

JavaScript掉Android原生

android代码

    private void initView() {
        mWebView = findViewById(R.id.web_x);
        WebSettings webSettings = mWebView.getSettings();

        // 设置与Js交互的权限
        webSettings.setJavaScriptEnabled(true);
        //设置编码
        //webSettings.setDefaultTextEncodingName("GBK");
        // 设置允许JS弹窗
       webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
        //加载页面
	 mWebView.loadUrl("file:///android_asset/index.html");
        //TODO JS 调用Android原生
        mWebView.addJavascriptInterface(new StartOne(), "test");       
    }

说明: new StartOne() 启动回调的方法, 这个test是启动 JavaScript回调原生方法的必不可少的,IOS则是不需要这个前缀的。

JavaScript代码


test.startHome
startHome : JavaScript的方法名

android代码

 //进入主页
    public class StartOne{
        @JavascriptInterface
        public void startHome(final String message) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Log.e("MME", message );
                    startActivity(new Intent(HomeActivity.this, HomeActivity.class));
              
                }
            });
        }
    }

在android中@JavascriptInterface 下要以JavaScript的方法名命名android的方法名,不然js怎么知道它要调起哪里。

然后执行下看下效果
常用的Js调Android方法,以及Android原生传值给Js_第1张图片
掉起后的页面
常用的Js调Android方法,以及Android原生传值给Js_第2张图片

Android原生给JavaScript传值的方法有好多,我写个我常用的方法 =_=!

Android原生给JavaScript传值
js调起android原生,原生android处理一些业务逻辑之后,再把处理完的结果返回给js

android代码

   mWebView.loadUrl("javascript:WriteX('"+s+"')");

WriteX 是与js商定的或回传方法

JavaScript代码


js拿到值并回显

你可能感兴趣的:(常用的Js调Android方法,以及Android原生传值给Js)