Android 与Html5 js相互总结

     最近有涉及到android与Html 5 JS交互的工作,来记录总结一下。

首先,android WebView webView 设置

     webview.getSettings().setJavaScriptEnabled(true);

    //绑定建立的javascript对象

     webview.addJavascriptInterface(new JsInterface(),"android");

    其中,JsInterface对象是android自定义的专门提供给js调用的;

               “android”是和Js相对应的一个参数,Html5见到android就会去调用JsInterface()里面的方法

webview.loadUrl(url);//url是初始界面的url

接下来,监听该url是否加载完成:

webview.setWebViewClient(new WebViewClient(){

     @Override

     public void onPageFinished(WebView view,String url){

          super.onPageFinished(view,url);

          //如果是监听初始url加载完成后,需要调用js的话,使用该方法去调用js

         webview.loadUrl(javascript:functionA(name));

        //其中,functionA(String name)必须与Html5中的方法是一致的。

   }

});

public class JsInterface{

   @JavascriptInterface//这个需要在API17以上需要在每个方法前加上

   public void functionB(String json){

      //若需要更新UI(其实就是要更新主线程UI),此时若Html5调用此方法通知native是在非主线程中,如果直接更新页面显示常会报错。抛出异常:android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

只有原始创建这个视图层次(view hierachy)的线程才能修改它的视图(view)
避免这种异常发生的其中一个方法:

runOnUiThread(new Runnable(){

          @Override

          public void run(){

           //在此更新UI即可。

            }

       }

    }

}


 

猜你喜欢

转载自blog.csdn.net/duanmulirui/article/details/53814998
今日推荐