網路應用
一、網頁瀏覽 Android應用程式採用Java語言,因此Java中所有對網路處理的方法,都能移植到Anadroid平台上。 Android SDK也提供了「WebView」類別,簡化我們網路應用開發的工作。 WebView的內部使用由Apple開發並釋出的「WebKit」為網頁處理引擎,它的使用與其他視圖元件並無太大差異。
使用網路,應用程式專案的組態檔(AndroidManifest.xml),必須申請對網路使用的許可如下: <uses-permission android:name= ”android.permission.INTERNET”/> WebViewSimple Test範例 以「WebView」元件取代原先預設的「RelativeLayout」佈局。 在活動程式碼中以WebView的「loadUrl(String url)」方法,載入指定網址的網頁,或顯示HTML檔描述的內容。 範例詳細內容請參考原書。
二、建立網頁操作功能 WebView不像一般的網頁瀏覽器,預設下它只是單純的顯示網頁內容,並沒有提供一些網頁操作的工具。 如果想要對網頁瀏覽有多一點控制,就必須抑制WebView的預設行為,讓超連結開啟改在WebView內部進行,這樣WebView就會在內部以一個歷程(history)堆疊記錄使用者拜訪過的網頁,然後以「goBack()」或「goForward()」方法在拜訪過的網頁之間瀏覽。
要達到這目的,我們必須建立一個延伸自「WebViewClient」類別的自建類別,在這自建類別內覆寫需要的處理方法,例如doUpdateVisitedHistory(WebView myWebView, String url, boolean isReloaded)方法,此方法在歷程記錄有變動時由系統呼叫執行。 完成WebViewClient的子類別定義後,用WebView的「setWebViewClient(WebViewClient)」方法將此子類別指定給WebView,這樣就能抑制WebView的預設行為,改採我們所設計的行為。
WebViewControlTest範例 在佈局中也提供EditText元件,讓使用者可以直接鍵入要拜訪網頁的網址。 範例詳細內容請參考原書。
三、與JavaScript溝通 因為網頁功能大都由JavaScript開發,因此要能和網頁溝通,就表示Android應用程式碼必須要能與JavaScript程式碼互動。 要達到這個目的,首先必須在WebView上啟用JavaScript,接著必須建立Android程式碼與JavaScript程式碼之間的介面。說明如下: 在WebView上啟用JavaScript
建立Android程式碼與JavaScript程式碼之間的介面 要啟用JavaScript必須透過附屬於此WebView的「WebSettings」物件,此物件可以由WebView的「getSettings()」方法取得,然後用取得的WebSettings物件的「setJavaScriptEnabled(Boolean)」方法就能啟用/停用JavaScript。 webView = (WebView) findViewById(R.id.webView1); WebSettings webSettings=webView.getSettings(); webSettings.setJavaScriptEnabled(true); 建立Android程式碼與JavaScript程式碼之間的介面 要讓網頁的JavaScript程式呼叫Android程式中的方法,必須建立一個JavaScript程式可以看得到的介面,並在此介面中定義JavaScript程式可以呼叫的方法。
設計此介面最簡單的方式,就是自建一個類別,不管是單獨成為一個檔案或含在活動類別內都可以。 public class JSAndAndroidInterfaceName { ….. @JavascriptInterface //For SDK 4.2以上 public void JSCanCallThisFunction(…) { … } 如果開發專案設定的「targetSdkVersion」為API Level 17以上(SDK 4.2以上),在定義讓JavaScript呼叫的方法前一定要加上「@JavascriptInterface」。
從Android程式執行開啟網頁中的JavaScript方法 為WebView增加此介面 用WebView的「addJavascriptInterface(Object ob,String agendName)」方法為自己增加此介面,方法中第1個參數是此介面物件的參考,第2個參數是提供JavaScript此介面的識別名稱。 webView.addJavascriptInterface(new JSAndAndroidInterfaceName (this), " agendName ") 從Android程式執行開啟網頁中的JavaScript方法 用WebView的「loadUrl(String)」方法,以傳入參數指名是JavaScript內那一個方法即可。 webView.loadUrl("javascript:methodName(…)");
AndroidAndJS Test範例 透過WebView的loadUrl方法以「file:///android_asset/<filename.html>」開啟指定網頁。 這網頁會顯示一個按鈕(input type=”button”)與一個文字輸入框(“input type=”text”)。當按下按鈕的時候,網頁中的JavaScript會呼叫Android程式中的「CallMe(String)」方法(介面識別名稱為Android),將傳遞的字串內容以Android佈局中的TextView元件顯示。 網頁中也提供有showAlert()函式供Android程式呼叫,此函式被呼叫時會以JavaScript的文字輸入框顯示「Android call me!」。
範例詳細內容請參考原書。
四、顯示Android內設定的網頁內容 WebView用「loadData(String)」方法顯示定義在Android自己程式內的網頁內容,只不過。 WebViewLoadData Test範例 活動程式內以字串定義網頁內容,並透過WebView loadData(String)方法顯示所定義的網頁。 範例詳細內容請參考原書。
五、用Intent開啟網頁 可以直接用Intent為我們顯示網頁內容,不必用到WebView。 WebAndIntent Test範例 當使用者按下佈局中的按鈕,按鈕的onClick事件處理方法會以Intent開啟指定的網頁(http://tw.msn.com/?ocid=iefvrt)。 範例詳細內容請參考原書。