什麼是Intent(意圖)?
強大的事件處理「Intent」(意圖)是Android很強大的一種機制。
在 Android 應用程式框架中,有一個非常聰明的事件處理機制,稱之為「Intent」。Intent(意圖)的作用與事件(event)很像,但與傳統的事件處理仍然 有些差異。傳統的事件處理,講求的是「處理者(handler)的觸發」,當一事件發生時,便callback讓事件的處理者,或是直接將該事件轉送 (forward)給應用程式,由應用程式決定處理方式。
在「Intent」這樣的事件處理觀念裡,Android 試圖將事件解釋為「應用程式的意圖」或是「使用者的意圖」,並試著去解釋該意圖的目的,若 Android 系統本身能理解應用程式的意圖,便會「自行」去處理該意圖所應執行的工作。
關於前述教學提到的Intent
在前面的教學裡,我們用到二次Intent如下:
1. 自行定義一個Intent、設定Service可接收此Intent,並透過「送出Intent給框架」的方式,請框架啟動該Service
2. 使用Android內部定義的ACTION_VIEW intent,來「檢視」(view)一個「URL」資料,當框架看到內部定義的ACTION_VIEW intent時,便「自行」處理該Intent;處理的方式是啟動WebView並連上網站
以前述的教學為例,使用內建的“ACTION_VIEW”意圖就可以很容易做出一個「啟動瀏覽器(WebView類別)上網」的應用程式。
透過這二個例子我們知道,Intent可以是自行定義與框架內部定義二種。框架定義的Intent提供很多方便實用的功能,以下我們說明Android內建Intent的美麗之處。
Android內建的Intent
為了讓大家更容易了解Intent的基本觀念,我們採用「體驗」的方式來說明如何使用內建的Intent。現在,我們列舉以下三個情境,並分別實作其範例:
1. HelloIntentDialer: 啟動撥號器(dialer)並撥號
2. HelloIntentMusic: 使用者按下「Select Music」後,可以由音樂清單裡選擇音樂並撥放
3. HelloIntentWallpaper: 啟動Android內建的「背景圖選擇器」,讓使用者更換背景
第二個範例”HelloIntentMusic”其實是ApiDemo裡的範例,而且是很容易能了解Intent內涵的好程式。
一個基本的Intent包含二項資訊:
1. action
2. data
Intent的action指定這個Intent的「動作」是什麼,框架會依指定的動作進行處理;有些action可以附帶一筆資料,這個資料是以Uri的格式撰寫,在HelloIntentDialer的範例會再做說明。
內建的Intent有哪些呢?請參考Android Reference Guide中的Intent類別說明。上述三個範例分別使用以下三個Intent:
1. ACTION_CALL: 撥號
2. ACTION_GET_CONTENT: 啟動內容選取器
3. ACTION_SET_WALLPAPER: 設定Wallpaper
在進行範例講解前,可以先行閱讀Intent類別的說明。ACTION_CALL是一個內建的Intent,我們只要產生一個Intent物件,並定義其「action」為ACTION_CALL即可通知框架「打電話」。
Android內建的Intent是相當實用的應用開發機制,同時也是Android OS最具代表性的機制之一。Android內建的Intent還分為二種action:
1. Activity Action: 啟動Activity的action
2. Broadcast Action: 透過廣撥器處理的action
第一種action是activity action,用途是通知框架啟動Activity,這裡提出的三個範例,都是使用activity action。Broadcast action在Broadcast的教學裡再做說明。
--jollen