從 Javascript 到 Java(Android) 的通訊

Android 活動

package com.example.myapp;

import android.os.Bundle;
import android.app.Activity;
import android.webkit.WebView;

public class WebViewActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        WebView webView = new WebView(this);
        setContentView(webView);

       /* 
        *   Note the label Android, this is used in the Javascript side of things
        *   You can of course change this.
        */
        webView.addJavascriptInterface(new JavascriptHandler(), "Android");
    
        webView.loadUrl("http://example.com");
    }
}

Java Javascript 處理程式

import android.webkit.JavascriptInterface;

public class JavascriptHandler {

    /**
     *  Key point here is the annotation @JavascriptInterface
     *
     */
    @JavascriptInterface
    public void jsCallback() {
       // Do something
    }

    @JavascriptInterface
    public void jsCallbackTwo(String dummyData) {
       // Do something
    }
}

網頁,Javascript 呼叫

<script>
... 
Android.jsCallback();
...
Android.jsCallback('hello test');
...
</script>

額外提示

傳遞複雜的資料結構,可能的解決方案是使用 JSON。

Android.jsCallback('{ "fake-var" : "fake-value", "fake-array" : [0,1,2] }');

在 Android 端使用你最喜歡的 JSON 解析器,即:JSONObject