Android中Java與JavaScript之間交互

jopen 10年前發布 | 30K 次閱讀 Android Android開發 移動開發

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>



 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!