140 likes | 297 Views
網路應用. 一、 網頁瀏覽. Android 應用程式採用 Java 語言,因此 Java 中所有對網路處理的方法,都能移植到 Anadroid 平台上。 Android SDK 也 提供了「 WebView 」類別,簡化我們網路應用開發的工作。 WebView 的內部使用由 Apple 開發並釋出的「 WebKit 」為網頁處理引擎,它的使用與其他視圖元件並無太大差異 。. 使用網路, 應用程式專案的組態檔 (AndroidManifest.xml) ,必須申請對網路使用的許可如下: <uses-permission android:name=
E N D
一、網頁瀏覽 • Android應用程式採用Java語言,因此Java中所有對網路處理的方法,都能移植到Anadroid平台上。 • Android SDK也提供了「WebView」類別,簡化我們網路應用開發的工作。 • WebView的內部使用由Apple開發並釋出的「WebKit」為網頁處理引擎,它的使用與其他視圖元件並無太大差異。
使用網路,應用程式專案的組態檔(AndroidManifest.xml),必須申請對網路使用的許可如下:使用網路,應用程式專案的組態檔(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範例 • 在佈局內增加按鈕元件,為WebView提供了在拜訪過的網頁中前後頁瀏覽以及縮放網頁內容等控制方式。 • 在佈局中也提供EditText元件,讓使用者可以直接鍵入要拜訪網頁的網址。 • 範例詳細內容請參考原書。
三、與JavaScript溝通 • 因為網頁功能大都由JavaScript開發,因此要能和網頁溝通,就表示Android應用程式碼必須要能與JavaScript程式碼互動。 • 要達到這個目的,首先必須在WebView上啟用JavaScript,接著必須建立Android程式碼與JavaScript程式碼之間的介面。說明如下: • 在WebView上啟用JavaScript
要啟用JavaScript必須透過附屬於此WebView的「WebSettings」物件,此物件可以由WebView的「getSettings()」方法取得,然後用取得的WebSettings物件的「setJavaScriptEnabled(Boolean)」方法就能啟用/停用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」。
為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)。 • 範例詳細內容請參考原書。