Chinaunix首页 | 论坛 | 博客
  • 博客访问: 335226
  • 博文数量: 89
  • 博客积分: 5152
  • 博客等级: 大校
  • 技术积分: 1155
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-25 15:12
文章分类

全部博文(89)

文章存档

2012年(1)

2011年(5)

2010年(14)

2009年(69)

我的朋友

分类: LINUX

2009-07-24 09:48:48

什麼是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

阅读(1111) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~