Android中Java与JavaScript之间交互

jopen 6年前

Android代码:


package com.fyfeng.testjavascript;    import android.app.Activity;  import android.content.Intent;  import android.os.Bundle;  import android.support.v7.app.ActionBarActivity;  import android.util.Log;  import android.webkit.WebView;  import android.widget.Toast;    public class MainActivity extends ActionBarActivity {     private static final String tag = MainActivity.class.getSimpleName();     WebView webView;     @Override   protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);      webView = (WebView) this.findViewById(R.id.webview);    webView.getSettings().setJavaScriptEnabled(true);//设置可以JavaScript    webView.loadUrl("http://192.168.1.104:8080/examples/");//加载网页      webView.addJavascriptInterface(new PayYa(), "pay");//定义一个支付结果,模拟。PayYa为支付接口处理类。     }     public void onClickPay() {    Intent intent = new Intent(this, SecondActivity.class);//模拟打开另外一个支付界面。    startActivityForResult(intent, 1000);   }     public void onPayCallback(String result) {    Log.d(tag, "result = " + result);    webView.loadUrl("javascript:payCallback('" + result + "');");//通知网页支付结果。   }     @Override   public void onActivityResult(int requestCode, int resultCode, Intent data) {//支付结果返回        Log.d(tag, "requestCode = " + requestCode + ", resultCode = " + resultCode);    switch (requestCode) {    case 1000: {       if (Activity.RESULT_OK == resultCode) {      onPayCallback("hello, 这是支付结果. !");      }       break;    }    }   }     public final class PayYa {      @android.webkit.JavascriptInterface    public void pay(String hello) {//支付请求处理函数     Log.d(tag, "pay = " + hello);       onClickPay();    }      public void show(String args) {//这个函数是为了辅助显示网页中的alert对话框。     Toast.makeText(getApplicationContext(), args, Toast.LENGTH_SHORT).show();    }   }    }




网页部分代码:

<!DOCTYPE HTML><html lang="en"><head>  <meta charset="UTF-8">  <title>Apache Tomcat Examples</title>  <script type="text/javascript">   function doPay(args){         javascript:pay.pay(args+(new Date()));//调用Android本地支付接口函数,参数为args+new Date();   pay为在Android原生应用代码中定义的一个支付对象,这个支付对象有个pay(...)方法。      //javascript:pay.show("hello");        }      function payCallback(args){//Android本地支付处理完毕回调该函数,并把支付结果传递到该函数。     //alert("pay callback = "+args);          //打印支付结果。       javascript:pay.show(args);  ////在Android的WebView中无法显示Alert对话框,只能借助Android原生Toast或者Dialog来显示。    }  </script>  </head>  <body>   <button onclick="doPay('hello')">doPay</button><!-- 点击支付事件。 -->  </body></html>