js中调用android中的方法

来源:互联网 发布:淘宝美工兼职 编辑:程序博客网 时间:2024/04/30 10:19

js中调用android中的方法

有时用h5写的html页面,在android原生开发的app中用webview加载显示,有时需要与android在的代码交互,即调用其中的方法,示例如下:见代码

package com.my.mywebview;    import android.annotation.SuppressLint;  import android.app.Activity;  import android.os.Bundle;  import android.os.Handler;  import android.view.Menu;  import android.view.MenuItem;  import android.view.View;  import android.view.View.OnClickListener;  import android.webkit.WebSettings;  import android.webkit.WebView;  import android.widget.Button;    @SuppressLint("SetJavaScriptEnabled")  public class MainActivity extends Activity {        //声明一个webview      private WebView mWebView;            private MyWebViewClient WVClient;        private WebSettings webSettings;            private MyWebChromeClient chromeClient;            //测试Button,忽略就行      private Button testBtn;        //调用JS的Button      private Button callJSBtn;            //双击返回退出应用      private long exitTime = 0;             //Object对象,用来跟JS网页绑定      private JSObject  jsobject;            //android调用JS网页的时候会用到      private Handler mHandler = new Handler();            @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.activity_main);          initView();      }        private void initView() {          // TODO Auto-generated method stub          mWebView = (WebView) findViewById(R.id.webview);          testBtn = (Button)findViewById(R.id.diyWeb);          callJSBtn = (Button)findViewById(R.id.calljs);                    WVClient = new MyWebViewClient();          chromeClient = new MyWebChromeClient();          jsobject = new JSObject(MainActivity.this);                     webSettings = mWebView.getSettings();          webSettings.setJavaScriptEnabled(true);          webSettings.setBuiltInZoomControls(true);          webSettings.setSavePassword(false);                    //支持多种分辨率,需要js网页支持          webSettings.setUserAgentString("mac os");          webSettings.setDefaultTextEncodingName("utf-8");                    //显示本地js网页          mWebView.loadUrl(StringUrl.TEST_NET);                              mWebView.setWebViewClient(WVClient);          mWebView.setWebChromeClient(chromeClient);                    //注意第二个参数JsTest,这个是JS网页调用Android方法的一个类似ID的东西          mWebView.addJavascriptInterface(jsobject, "JsObject");                    //测试自定义网页,忽略          testBtn.setOnClickListener(new OnClickListener() {                            @Override              public void onClick(View v) {                  // TODO Auto-generated method stub                  String str = "test my web";                  mWebView.loadData("<html><body>"+str+"<html><body>", "text/html", "UTF-8");              }          });                              //调用JS网页          callJSBtn.setOnClickListener(new OnClickListener() {                            @Override              public void onClick(View v) {                  // TODO Auto-generated method stub                  mHandler.post(new Runnable() {                                            @Override                      public void run() {                          // TODO Auto-generated method stub                          //调用JS中的 函数,当然也可以不传参                          mWebView.loadUrl("javascript:androidCallJS('顺便传个参数给JS!')");                      }                  });              }          });                }                  @Override      public boolean onCreateOptionsMenu(Menu menu) {          // Inflate the menu; this adds items to the action bar if it is present.          getMenuInflater().inflate(R.menu.main, menu);          return true;      }        @Override      public boolean onOptionsItemSelected(MenuItem item) {                    // Handle action bar item clicks here. The action bar will          // automatically handle clicks on the Home/Up button, so long          // as you specify a parent activity in AndroidManifest.xml.          int id = item.getItemId();          if (id == R.id.action_settings) {              return true;          }          return super.onOptionsItemSelected(item);      }              //单击系统返回键网页回退      @Override      public void onBackPressed() {          // TODO Auto-generated method stub          //if (System.currentTimeMillis() - exitTime > 1500) {              if (mWebView.canGoBack()) {                  mWebView.goBack();              }/*else {                 Toast.makeText(this, "再按一次返回键退出", Toast.LENGTH_SHORT).show();             }             exitTime = System.currentTimeMillis();         } */           else {              this.finish();          }      }    }  [java] view plain copypackage com.chinaonenet.mywebview;    import android.content.Context;  import android.util.Log;  import android.webkit.JavascriptInterface;  import android.widget.Toast;    public class JSObject {          /*          * 绑定的object对象          * */          private Context context;          public JSObject(Context context){              this.context = context;          }                    /*         * JS调用android的方法         * @JavascriptInterface仍然必不可少         * */        @JavascriptInterface        public void  ShowPic(String currentPcl,String totalPcl){            if(TextUtils.isEmpty(totalPcl)){               return ;            }            String[] split = totalPcl.split(",");            ArrayList<String> stringList = new ArrayList<>();            for(String s:split){                stringList.add(s);            }            int pos = getPos(currentPcl, stringList);            Common.imageBrowse(NewsDetail.this,pos,stringList,true);        }  }  //下面是网页里调用的写法 JSObject是java代码中注册的那个类接口,ShowPic是那个要调用的方法$("img").click(function() {    JSObject.ShowPic(this.src,str);});


反过来android中的代码调用html中的js方法也是可以的
--- end ---
0 0
原创粉丝点击