一般的なjsとjavaインタラクション


**
前言
**Androidは、Webページを処理するための強力なWebViewコントロールを提供していますが、JavaScriptは重要なスクリプトです.JavaコードとJavascriptコードの相互呼び出しを実現する方法について説明します.
実装方法
Javaとjsのインタラクションを実現するのは便利です.通常、JavaScriptスクリプトの実行を開始するには、1、WebViewを使用します.2、WebViewはJavaScript呼び出し用のインタフェースを設定する.3、クライアントとウェブページ側は相手を呼び出すコードを作成する.
サンプルコード
JAva側:
public class MainActivity extends Activity {
  private static final String LOGTAG = "MainActivity";
  @SuppressLint("JavascriptInterface")
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      final WebView myWebView = (WebView) findViewById(R.id.myWebView);
      WebSettings settings = myWebView.getSettings();
      settings.setJavaScriptEnabled(true);//  ,  js  
      myWebView.addJavascriptInterface(new JsInteration(), "control");//  java    js         , window.control.xxx
      myWebView.setWebChromeClient(new WebChromeClient() {});
      myWebView.setWebViewClient(new WebViewClient() {

          @Override
          public void onPageFinished(WebView view, String url) {
              super.onPageFinished(view, url);
              testMethod(myWebView);
          }
          
      });
      myWebView.loadUrl("file:///android_asset                   /js_java_interaction.html");
  }
  
  private void testMethod(WebView webView) {
      String call = "javascript:sayHello()";
      
      call = "javascript:alertMessage(\"" + "content" + "\")";
      
      call = "javascript:toastMessage(\"" + "content" + "\")";
      
      call = "javascript:sumToJava(1,2)";
      webView.loadUrl(call);
      
  }
  
  public class JsInteration {
      
      @JavascriptInterface  //       ,4.2      android addJavascriptInterface  ,         addJavascriptInterface,   onJsPrompt      
      public void toastMessage(String message) {
          Toast.makeText(getApplicationContext(), message,              Toast.LENGTH_LONG).show();
      }
      
      @JavascriptInterface
      public void onSumResult(int result) {
          Log.i(LOGTAG, "onSumResult result=" + result);
      }
  }
}

フロントエンド:
<html>
<script type="text/javascript">
    function sayHello() {
        alert("Hello")
    }
    function alertMessage(message) {
        alert(message)
    }
    function toastMessage(message) {
        #       
        window.control.toastMessage(message)
    }
    function sumToJava(number1, number2){
    	#      
       window.control.onSumResult(number1 + number2)
    }
</script>
Java-Javascript Interaction In Android
</html>

Java呼び出しjs:webView呼び出しjsの基本フォーマットはwebView.loadUrl(“javascript:methodName(parameterValues)”)
呼び出しjs無パラメトリック戻り値関数String call="javascript:sayHello()";//loadUrl(Webアドレス)Webページを開きます.loadUrl(call);
jsパラメータ値として文字列をパラメータ値として呼び出すには、エスケープ二重引用符String call=「javascript:alertMessage(」+「content」+「」)が必要です.webView.loadUrl(call);
呼び出しjsパラメータに戻り値がある関数Androidは4.4以前はjs関数を直接呼び出して値を取得する方法を提供していなかったため、それ以前はjavaがjsメソッドを呼び出し、jsメソッドが実行され、再びjavaコードを呼び出して値を返すのが一般的な考え方だった.
Android 4.4戻り値を呼び出すjs関数メソッド:Js:
function getGreetings() {
      return 1;
}

Java:
webView.evaluateJavascript("getGreetings()", new ValueCallback<String>() {
    @Override
    public void onReceiveValue(String value) {
        Log.i(LOGTAG, "onReceiveValue value=" + value);
    }});

4.4未満:
String call = "javascript:sumToJava(1,2)";
webView.loadUrl(call);
function sumToJava(number1, number2){
       window.control.onSumResult(number1 + number2)
}
@JavascriptInterface
public void onSumResult(int result) {
  Log.i(LOGTAG, "onSumResult result=" + result);
}