Android Intent 基本使用及物件構成

2021-09-06 08:36:34 字數 3232 閱讀 9503

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

intent可以啟動乙個activity,也可以啟動乙個service,還可以發起乙個廣播broadcast。

具體方法如下表:

元件名稱

方法名稱

activity

startactivity()

startactivityforresult()

service

startservice()

bindservice()

broadcasts

sendbroadcast()

sendorderedbroadcast()

sendstickybroadcast()

1.啟動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物件由以下六個部分組成:

component name

action

data

category

extras

flags

component name即元件名稱,是要處理這個intent物件的元件名稱。

元件名稱物件由componentname類來封裝,元件名稱包含包名稱類名稱,被宣告在androidmanifest.xml檔案中。

元件名稱通過 setcomponent(),setclass(),setclassname()設定,通過getcomponent()獲取。

需要注意的是component name是乙個可選項,如果被設定,那麼intent物件就顯式指定了要轉向的元件,如果沒有被設定,則intent物件需要根據其他資訊進行篩選查詢。

action是指intent要完成的動作,是乙個字串常量。

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

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

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

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

使用 setaction() 和 getaction()來設定和讀取action屬性。

data屬性是執行動作的uri和mime型別,不同的動作有不同的資料規格。

比如,action是action_edit時,資料域將是文件的uri;action是action_call時,資料域是 tel: uri ,帶有要撥打的**號碼;如果action是 action_view,則資料域是http: uri。

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

資料型別也可以顯式指定,比如setdata()方法指定資料為uri,settype() 指定為mime type,setdataandtype() 指定它既為uri又為mime type。讀取的時候uri用getdata(),mime type用gettype()。

category是乙個字串,提供了額外的資訊,有關於能夠處理這個intent物件的元件種類。

乙個intent物件中可以包含任意數量的category描述資訊。

intent類中也定義了一些category常量:

與category相應的方法有新增addcategory()、移除removecategory() 和獲取所有category getcategories() 。

傳遞給intent的額外資料,以bundle的形式定義,就是一些鍵值對。就好像一些動作和特定的資料uri對應,一些動作和特定的extras對應。

比如action_timezone_changed intent物件有乙個 "time-zone"的extra來確認新的時區; 

action_headset_plug有乙個"state" extra表示耳機是否插入,還有乙個 "name" extra關於耳機型別;

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

intent物件有一系列的put***()函式用於放入各種資料型別,相應的也有一系列的get***()函式用於讀取資料。

實際上,資料可以被作為乙個bundle物件被使用,利用 putextras() 和 getextras() 方法。

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

官方文件:

部落格:

android intent 用法總結

給移動客服10086撥打 uri uri uri.parse tel 10086 intent intent new intent intent.action dial,uri startactivity intent 給10086傳送內容為 hello 的簡訊 uri uri uri.parse ...

Android Intent學習總結

intent物件大致包含component action category data type extra和flag這7種屬性,其中component用於明確指定需要啟動的目標元件,而extra則用於 攜帶 需要交換的資料。顯式啟動 啟動指定元件 以找男朋友為例,顯示啟動指定物件,比如一定要 梁山伯...

Android Intent全面用法

前言 前幾天在做跳轉到系統應用通知頁的時候,用到了intent的多種用法,故現在來總結一下。1.intent簡介 intent可以啟動activity,service或者配合廣播使用。在sdk中給出了intent作用的表現形式為 通過 context.startactivity 或者 activit...