2011年4月6日 星期三

Android 的程式基礎(三)-Intent

在中文裡被翻譯成「意圖」,雖然覺得很彆扭,但是也想不到什麼更好的詞。

Android 程式組成四種元素(Activity、Service、Content Provider、Broadcast receiver)中,除了Content Provider 之外,其它三種都是經由 Intent 所啟動的。以這個規則來猜測,應用程式選單也是一個 Android 程式,列出大部分(不敢說是全部)可以被 Intent 啟動的程式,再代替使用者建立並發出 Intent。

因為不同的元素是繼承於各自的基底類別,所以啟動的方式也不一樣。像是 Activity 使用 Intent.startActivity() 啟動其它程式,或者呼叫 Intent.startActivityForResult() 啟動並等待被啟動的程式回傳訊息(例︰要求相機程式拍完相片,把相片資訊傳回來)。而 Service 除了可以經有 Intent 啟動(startService) 也可以和運作中的 Service 連結(bindService)。

至於 Broadcast receiver 到目前為止還沒能搞清楚它的運作方式,等到基礎文件看完後再去研究好了。

Intent 可以視為一種「要求訊息」,除了用來告訴 Android 系統啟動某程式/服務外,也可以帶有訊息,利用 URI 的方式,像是呼叫手機的播號程式會帶有要播打的號碼,發信程式會帶有目標 Email Address。除了這類訊息之外,在其它書上的例子中還看到可以把要傳遞的資料「打包」一併傳過去,這樣才能傳遞多個或是非文字(二進位)的資料。打包也是等到之後研究到再作筆記。

另外還不了解的,則是 Intent 要如何去綁定,最基本以套件加類別名稱的作法在其它書本上已經看到過。不過怎麼作出像「開啟瀏覽器」這樣可以讓系統彈出選單,詢問要使用哪一種瀏覽器的結果。就不知道了,只能猜出應該是同一個 Intent 訊息中,綁上二個以上的程式,系統無法決定要啟動哪一個的時候就跳出視窗詢問。

不知道像是瀏覽器這類的 Intent 訊息是系統已經定義好的那幾種,還是可以自訂新的種類。等到深入研究的時候應該就會知道了吧!

沒有留言:

張貼留言