Android Intent 基本使用及對象構成

來源:互聯網
上載者:User

標籤:

Intent Intent基本使用

  Intent可以理解為不同組件通訊的媒介或者信使。

  Intent可以啟動一個Activity,也可以啟動一個Service,還可以發起一個廣播Broadcast。

  具體方法如下表:

組件名稱

方法名稱

Activity

startActivity()

startActivityForResult()

Service

startService()

bindService()

Broadcasts

sendBroadcast()

sendOrderedBroadcast()

sendStickyBroadcast()

 

1.啟動Activity:

  向Context.startActivity() 或Activity.startActivityForResult()方法傳遞一個Intent對象,可以啟動一個activity,或使得一個已經存在的activity去做一些新的事情。

  (也可以向 Activity.setResult() 去傳遞這個Intent對象,返回調用了startActivityForResult()的activity的一些資訊。)

 

2.啟動Service:

  向 Context.startService() 方法傳遞Intent對象可以初始化一個service或者向一個已經存在的service傳遞新的指令。

  類似的,向Context.bindService() 方法傳遞Intent對象可以在調用所在的組件和目標service之間建立一種串連。如果這個service並沒有開始運行,則它可以初始化這個service。

 

3.發起廣播Broadcast

  可以向下面的廣播方法傳遞Intent對象來發起廣播:

   Context.sendBroadcast(),Context.sendOrderedBroadcast(), 或 Context.sendStickyBroadcast()。系統會找到相應的廣播接收者對此進行響應。

  

  Intent在尋找目標組件時有兩種方法:

  第一種,顯式調用,通過Component name直接指定;

  第二種,隱式調用,沒有明確指定目標組件的名稱,那麼就要通過一定的條件過濾篩選。

  啟動activity、service和broadcast的訊息系統是沒有任何重合的,即,一個要啟動activity的Intent對象是絕對不會啟動一個service的。

 Intent對象構成

  Intent對象由以下六個部分組成:

  Component name

  Action

  Data

  Category

  Extras

  Flags

 

Component name

  Component name即組件名稱,是要處理這個Intent對象的組件名稱。

  組件名稱對象由ComponentName類來封裝,組件名稱包含包名稱類名稱,被聲明在AndroidManifest.xml檔案中。

  組件名稱通過 setComponent(),setClass(),setClassName()設定,通過getComponent()擷取。

  需要注意的是Component name是一個可選項,如果被設定,那麼Intent對象就顯式指定了要轉向的組件,如果沒有被設定,則Intent對象需要根據其他資訊進行篩選尋找。

 Action

  Action是指Intent要完成的動作,是一個字串常量。

  在Intent類裡面定義了很多Action常量,其中有:

 

  Intent類中有很多預定義的常量,為了一些通常的動作;還有一些定義在Android API的其他地方。

  也可以自己定義Action常量,自訂的常量需要加上你的應用的包名作為首碼。

  Action在很大程度上決定了Intent的其他部分是如何構造的,尤其是 data 和 extras域。(就好像函數名會決定著參數值和傳回值一樣。)所以Action的名字應該儘可能具體,並且它們應該和Intent中的其他域緊密結合。

  使用 setAction() 和 getAction()來設定和讀取Action屬性。

 

Data

  Data屬性是執行動作的URI和MIME類型,不同的動作有不同的資料規格。

  比如,Action是ACTION_EDIT時,資料域將是文檔的URI;Action是ACTION_CALL時,資料域是 tel: URI ,帶有要撥打的電話號碼;如果Action是 ACTION_VIEW,則資料域是http: URI。

  當匹配intent和能夠處理intent所帶的資料的組件時,知道資料類型(MIME類型)是很重要的。比如,一個展示映像的組件不應該被叫去播放一個音頻。

  很多情況下,從URI可以看出資料類型,比如content: URIs,表示資料是在裝置上,但是是由content provider控制。

  資料類型也可以顯式指定,比如setData()方法指定資料為URI,setType() 指定為MIME type,setDataAndType() 指定它既為URI又為MIME type。讀取的時候URI用getData(),MIME type用getType()。

 Category

  Category是一個字串,提供了額外的資訊,有關於能夠處理這個Intent對象的組件種類。

  一個Intent對象中可以包含任意數量的category描述資訊。

  Intent類中也定義了一些Category常量:

 

 

  與category相應的方法有添加addCategory()、移除removeCategory() 和擷取所有category getCategories() 。

 Extras

  傳遞給Intent的額外資料,以Bundle的形式定義,就是一些索引值對。就好像一些動作和特定的資料URI對應,一些動作和特定的extras對應。

  比如ACTION_TIMEZONE_CHANGED intent對象有一個 "time-zone"的extra來確認新的時區; 

  ACTION_HEADSET_PLUG有一個"state" extra表示耳機是否插入,還有一個 "name" extra關於耳機類型;

  如果你要設計一個SHOW_COLOR動作,那麼extra中應該包含顏色值。

  Intent對象有一系列的putXXX()函數用於放入各種資料類型,相應的也有一系列的getXXX()函數用於讀取資料。

  實際上,資料可以被作為一個Bundle對象被使用,利用 putExtras() 和 getExtras() 方法。

 Flags

  各種類型的Flag。很多是用來指定Android系統如何啟動activity,還有啟動了activity後如何對待它。所有這些都定義在Intent類中。

 

 

參考資料

  官方文檔:

  http://developer.android.com/reference/android/content/Intent.html

  http://developer.android.com/guide/components/intents-filters.html

  部落格:

  http://www.cnblogs.com/feisky/archive/2010/01/16/1649081.html?t=1354802353061

 

 

轉載自:http://www.cnblogs.com/mengdd/archive/2013/03/18/2965839.html

Android Intent 基本使用及對象構成

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.