美文网首页
Android java与js相互调用以及遇到的坑

Android java与js相互调用以及遇到的坑

作者: 飞翔的蚂蚁 | 来源:发表于2016-07-21 22:56 被阅读507次

Android中java与js相互调用需要通过webview作为中介。

如果需要调用js代码,需要配置webview settings。

webview= (WebView) rootView.findViewById(R.id.webview);

webview.getSettings().setJavaScriptEnabled(true);

如果js需要调用java代码,需要增加一个单独的类给js调用,例如:

this.webview.addJavascriptInterface(new JsInteration(),"AppInterface");

public classJsInteration {

     @JavascriptInterface  

      public  void getLocalIp() {

             System.out.println("getLocalIp");

      }

      @JavascriptInterface

       public  void getMacAddress() {

             System.out.println("getMacAddress");

        }

}

js代码调用

function getMacAddress(){

       window.AppInterface.getMacAddress()

}

java调用js代码之前,需要设置

this.webview.setWebChromeClient(new WebChromeClient());

this.webview.setWebViewClient(new WebViewClient());

private class  WebViewClient  extends  WebViewClient {

      @Override

       public booleanshouldOverrideUrlLoading(WebView view, String url) {

             view.loadUrl(url);

             return true;

       }

       @Override

       public voidonReceivedError(WebView view,interrorCode,

       String description, String failingUrl) {

             super.onReceivedError(view, errorCode, description, failingUrl);

        }

        @Override

         public voidonPageFinished(WebView view, String url) {

             super.onPageFinished(view, url);

         }

}

然后可以调用

String jsSend ="javascript:androidKeyHandler.handleUri('nativewebsample://KEY_EVENT;"

+ keycode +";');";

webview.loadUrl(jsSend);

遇到的坑,做了混淆,js总是无法调用java函数。所以需要在proguard文件做如下设置。

-keepclassmembersclass com.philofly.android.activity.WebActivity$JsInteration {

      public *;

}

-keepattributes  *JavascriptInterface*

相关文章

网友评论

      本文标题:Android java与js相互调用以及遇到的坑

      本文链接:https://www.haomeiwen.com/subject/uzabjttx.html