之前在玩 PhoneGap 的時候,就有想過能不能在 javascript 裡面就直接調用 Android Java 的 class,答案是可以的,Android 的官方文件的 WebView 教學,就有教怎麼去使用,下面稍微做個範例
1. 在要執行的頁面 (XXX.XML) 檔裡放入一個 WebView 如下
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" />
2. 進入 AndroidManifest.xml 檔裡開啟權限
<uses-permission android:name="android.permission.INTERNET"/>
3. 在執行的 java 檔裡 (src/your_package/你要執行的 java 檔案 ex. MainActivity.java) 寫入下列程式碼
//先把在頁面中呈現的 WebView 註冊,接著就能用 webview 執行底下的方法
WebView webview= (WebView) findViewById(R.id.webView);
//設定一個 Javascript 的 Interface,前面是指這邊這個物件,後面是要註冊的名稱,這邊先將它取名為 test
webview.addJavascriptInterface(this, "test");
//接著將 JavaScript 的設定開起來
webview.getSettings().setJavaScriptEnabled(true);
//指向設定預定呈現的頁面,此處我是將檔案放在 assets/www/ 底下,www 資料夾為自行創建
webview.loadUrl("file:///android_asset/www/index.html");
//在 onCreate() 外面創建一個 function,也是在同一支程式檔裡,上面 addJavascriptInterface this 就代表指向的檔案
public void javascripCall(){
log.d("javascrip_call","test");
}
4. 在 index.html 裡,可直接執行 javascript 程式碼,也可使用 <script type="text/javascript" src="js/xxx.js"></script> 檔案引入的方式,都是可行的
而在 index,html 裡的 javascript 碼,只要照著剛剛設定的名稱進行呼叫,就可以直接調用 Java 的 function
<script type="text/javascript">
callAndroidJava = function(){
test.javascripCall();
}
</script>