青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

life02

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  197 隨筆 :: 3 文章 :: 37 評論 :: 0 Trackbacks


http://blog.csdn.net/louiswangbing/article/details/6610936

Android開發組件——Intent

Intent提供了一種通用的消息系統,允許你的應用程序與其它的應用程序間傳遞Intent來執行動作和產生事件。通過使用Intent可以激活Android應用的三個核心組件:活動、服務和廣播接收器。

Intent 的意思是意圖,也就是說App通過Intent向android表達自己的意圖即想干什么,想啟動另一個Activity或者去調用其它的App等 等;Intentfilter反應了App對意圖的響應能力,比如書上的例子撥號程序,在自己的App中聲明一個Intentfilter對這個動作意圖 進行相應,這樣當我們按下撥號鍵時,android就會在所用的Intentfilter中找到合適的App來滿足。

¥  Intent的分類

Ø  顯示意圖

調用Intent.setComponent()或Intent.setClass()方法明確指定了組件名的Intent為顯示意圖,明確指定了Intent應該傳遞到哪個組件。

Ø  隱式意圖

沒有明確指定組件名的Intent為隱式意圖。Android系統會根據隱式意圖中設置的動作、類別、數據找到最適合的組件來處理這個意圖

¥  Intent究竟是什么

我 們可以將Intent看成是Activity通信的標準的。比如Intent中的內容告訴了系統激發Intent的Activity需要什么服務,而服務 者Activity應該滿足的條件。然后就是Android系統的事了,它負責找出符合條件的Activity服務者,并將Intent給 Activity服務者,然后這個Activity根據Intent中剩余的信息做出相應的操作。由上面可知,Intent包含兩部分信息:

Ø  Activity服務者的信息,這個是給Android用來找到合適Activity的。

Ø  Activity服務者要做什么操作的信息,這個是給Activity服務者用的。

¥  Intent

Android 中提供了Intent機制來協助應用間的交互與通訊,Intent負責對應用中一次操作的動作、動作涉及數據、附加數據進行描述,Android則根據此 Intent的描述,負責找到對應的組件,將Intent傳遞給調用的組件,并完成組件的調用。Intent不僅可用于應用程序之間,也可用于應用程序內 部的Activity/Service之間的交互。因此,Intent在這里起著一個媒體中介的作用,專門提供組件互相調用的相關信息,實現調用者與被調 用者之間的解耦。

¥  Intent的屬性

Ø  Action

表示要執行的動作,當然也可以自定義動作,并可定義相應的Activity

來處理我們的自定義動作。

Ø  Data

也就是執行動作要操作的數據。Android中采用指向數據的一個URI

來表示。如在聯系人應用中,一個指向某聯系人的URI可能為:content://contacts/1。對于不同的動作,其URI數據的類型是不同的(可以設置type屬性指定特定類型數據),如ACTION_EDIT指定Data為文件URI,打電話為tel:URI,訪問網絡為http:URI,而由content provider提供的數據則為content:URIs。

 如果動作字段是ACTION_EDIT,數據字段包含將顯示用于編輯的文

檔的URI;如果動作時ACTION_CALL。數據字段將是一個tel:URI和將撥  打的號碼;如果動作是ACTION_VIEW,數據字段是一個http:URI,接收活動將被調用去下載和顯示URI指向的數據。

Ø  Type

數據類型,顯示指定Intent的數據類型(MIME)。一般Intent的數據

類型能夠根據數據本身進行判斷,但是通過設置這個屬性,可以強制采用顯式指定的類型而不再進行推導。

Ø  Category

被執行動作的附加信息。例如LAUNCHER_CATEGORY表示intent的接

受 者應該在Launcher中作為頂級應用出現;而ALTERNATIVE_CATEGORY表示當前的Intent是一系列的可選動作中的一個,這些動作 可以在同一數據上執行。Alternative表明,這個Activity可以變成OptionMenu,供其他Activity直接調用。

Ø  Component

指定Intent的目標組件的類名稱。通常Android會根據Intent中包含

的 其它屬性的信息,比如action、data/type、category進行查找,最終找到一個與之匹配的目標組件。但是,如果component這個 屬性有指定的話,將直接使用它指定的組件,而不再執行上述查找過程。指定了這個屬性以后,Intent的其它所有屬性都是可選的。

Ø  Extra

是其它所有附加信息的集合。使用extras可以為組件提供擴展信息,

比如,如果要執行“發送電子郵件”這個動作,可以將電子郵件的標題、正文等保存在extras里,傳給電子郵件發送組件。

Android需要解析的是那些隱式Intent,通過解析,將Intent映射給可以

處理此Intent的Activity、IntentReceiver或Service。Intent解析機制主要是通

過查找已注冊在AndroidManifest.xml中的所有IntentFilter及其中定義的Intent,

最終找到匹配的Intent。在這個解析過程中,Android是通過Intent的action、

type、category這三個屬性來進行判斷,判斷方法如下:

@  如果Intent指定了action,則目標組件的IntentFilter的action列表中就必須包含有這個action,否則就不能匹配。

@  如果Intent沒有提供type,系統將從data中得到數據類型。和action一樣,目標組件的數據類型列表中必須包含Intent的數據類型,否則不能匹配。

@  如果Intent中的數據不是content:類型的URI,而且Intent也沒有明確指定它的type,將根據Intent中數據的scheme(比 如http:或者mailto:)進行匹配。同上,Intent的scheme必須出現在目標組件的scheme列表中。

@  如果Intent指定了一個或多個category,這些類別必須全部出現在組件的類別列表中。比如Intent中包含了兩個類別:LAUNCHER_CATEGORY和ALTERNATIVE_CATEGORY,解析得到的目標組件必須至少包含這兩個類別。

當匹配一個intent到一個能夠處理數據的組件,通常知道數據的類型(它

的MIME 類型)和它的URI很重要。例如,一個組件能夠顯示圖像數據,不應該被調用去播放一個音頻文件。

 在許多情況下,數據類型能夠從URI中推測,特別是content:URIs,它表

示 位于設備上的數據且被內容提供者(content provider)控制。但是類型也能夠顯示地設置,setData()方法指定數據的URI,setType()指定MIME類 型,setDataAndType()指定數據的URI和MIME類型。通過getData()讀取URI,getType()讀取類型。

¥  Intent過濾器

活動、服務、廣播接收者為了告知系統能夠處理哪些隱式Intent,它們

可 以有一個或多個intent過濾器。每個過濾器描述組件的一種能力,即樂意接收的一組Intent。實際上,它篩掉不想要的Intents,也僅僅是不想 要的隱式Intents。一個顯示Intent總是能夠傳遞到它的目標組件,不管它包含什么;不考慮過濾器。但是一個隱式Intent,僅當它能夠通過組 件的過濾器之一才能夠傳遞給它。

一個組件能夠做的每一工作有獨立的過濾器,例如,記事本中的NoteEditer活動有兩個過濾器,一個是啟動一個指定的記錄,用戶可以查看和編輯;另一個是啟動一個新的、空的記錄,用戶能夠填充并保存。

一 個intent過濾器是一個IntentFilter類的實例。因為Android系統在啟動一個組件之前必須知道它的能力,但是intent過濾器通常 不在java代碼中設置,而是在應用程序的清單文件(AndroidManifest.xml)中設置。但是有一個例外,廣播接收者的過濾器通過調用 Context.registerReceiver()動態地注冊,它直接創建一個IntentFilter對象。

一 個過濾器有對應于Intent對象的動作、數據、種類的字段。過濾器要檢測隱式Intent的所有這三個字段,其中任何一個失敗,Android系統都不 會傳遞Intent給組件。然而,因為一個組件可以有多個Intent過濾器,一個Intent通不過組件的過濾器檢測,其它的過濾器可能通過檢測。

一個過濾器必須至少包含一個<action>子元素,否則它將阻塞所有的Intents。

要通過檢測,Intent對象中指定的動作必須匹配過濾器的動作列表中的一個。如果對象或過濾器沒有指定一個動作,結果將如下:

?   如果過濾器沒有指定動作,沒有一個Intent將匹配,所有的Intent將檢測失敗,即沒有intent能夠通過過濾器。

?   如果Intent對象沒有指定動作,將自動通過檢查(只要過濾器至少有一個過濾器,否則就是上面的情況了)

對于一個Intent要通過種類檢測,Intent對象中的每個種類必須匹配過

濾器中的一個。即過濾器能夠列出額外的種類,但是Intent對象中的種類都必須能夠在過濾器中找到,只有一個種類在過濾器列表中沒有,就算種類檢測失敗!

        因此原則上如果一個Intent對象中沒有種類(即種類字段為空)應該總

是 通過種類測試,而不管過濾器中有什么種類。但是有個例外,Android對待所有傳遞給Context.startActivity()的隱式 Intent好像它們至少包含”android.intent.category.DEFAULT”(對應CATEGORY_DEFAULT常量)。因 此,活動想要接收隱式Intent必須要在Intent過濾器中包含”android.intent.category.DEFAULT”。

      Intents對照著Intent過濾器匹配,不僅去發現一個目標組件去激活,而且

去 發現設備上的組件的其他信息。例如,Android系統填充應用程序啟動列表,最高層屏幕顯示用戶能夠啟動的應用程序:是通過查找所有的包含指定 了”android.intent.action.MAIN”的動作和”android.intent.category.LAUNCHER” 種         類的過濾器的活動,然后在活動列表中顯示這些活動的圖標和標簽。類似的,   它通過查找”android.intent.category.HOME”過濾器的活動發掘主菜單。

¥  Intent示例

要實現兩個Activity的跳轉,我們可以將要跳轉的Activity類名綁定到

Intent對象中,然后通過startActivity方法激活Intent對象中所指定的Activity,關鍵代碼如下:


posted on 2011-12-07 23:25 life02 閱讀(367) 評論(0)  編輯 收藏 引用 所屬分類: android組件學習
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久7777| 国产一区二区丝袜高跟鞋图片| 亚洲承认在线| 国产亚洲aⅴaaaaaa毛片| 国产精品自拍视频| 国产欧美一区二区三区在线看蜜臀| 欧美日韩在线第一页| 欧美日韩另类视频| 国产精品久久影院| 国产一区二区三区在线观看网站| 极品中文字幕一区| 亚洲精品国久久99热| 中文精品一区二区三区| 欧美一区二区三区免费观看| 久久―日本道色综合久久| 欧美sm极限捆绑bd| 亚洲最新色图| 久久黄金**| 欧美日韩成人综合天天影院| 国产欧美精品日韩区二区麻豆天美| 狠狠88综合久久久久综合网| 日韩亚洲国产精品| 久久精品国产亚洲5555| 亚洲成人中文| 一区二区三区四区五区视频| 欧美怡红院视频| 欧美日本在线观看| 激情视频一区二区三区| 亚洲天堂av在线免费观看| 久久网站热最新地址| 亚洲美女在线国产| 久久先锋资源| 国产精品色婷婷| 99国产精品自拍| 欧美成人中文字幕在线| 亚洲欧美日韩中文视频| 欧美日韩国产电影| 亚洲国产日韩欧美在线图片| 欧美一二三视频| 99热免费精品| 欧美成黄导航| 欲色影视综合吧| 久久精品毛片| 亚洲一区二区欧美日韩| 欧美日韩99| 亚洲精品欧洲| 欧美不卡高清| 在线一区二区日韩| 国产精品日韩在线一区| 1024国产精品| 久久国产福利国产秒拍| 宅男噜噜噜66国产日韩在线观看| 麻豆精品在线视频| 国产亚洲人成网站在线观看| 亚洲在线视频免费观看| 亚洲精品视频啊美女在线直播| 久久久噜噜噜久久人人看| 国产区欧美区日韩区| 午夜精品久久| 亚洲一区国产视频| 国产精品三级视频| 午夜久久影院| 亚洲自拍电影| 国产精品毛片在线| 亚洲在线一区二区| 一本色道久久综合亚洲精品不| 欧美精品在线免费观看| 99re热这里只有精品免费视频| 亚洲高清一区二| 欧美第十八页| 一区二区三区日韩精品| 一本色道久久综合狠狠躁篇的优点| 欧美巨乳在线| 亚洲欧美国产一区二区三区| 亚洲图片自拍偷拍| 国产日韩久久| 免费看的黄色欧美网站| 免费观看不卡av| 中文国产成人精品| 亚洲欧美日韩天堂| 在线观看国产日韩| 亚洲精品一区在线观看| 国产精品私人影院| 免费欧美网站| 欧美日韩亚洲免费| 久久精精品视频| 美国十次了思思久久精品导航| 一区二区三区成人| 欧美亚洲系列| 亚洲精品黄网在线观看| 一区二区三区回区在观看免费视频| 国产精品剧情在线亚洲| 美女亚洲精品| 欧美日韩精品二区第二页| 欧美在线欧美在线| 欧美96在线丨欧| 亚洲欧美日韩一区| 老司机免费视频久久| 亚洲一区日韩| 免费在线观看日韩欧美| 性做久久久久久| 欧美freesex交免费视频| 亚洲欧美日韩高清| 奶水喷射视频一区| 久久av二区| 欧美日韩中文字幕| 欧美成人a∨高清免费观看| 国产精品高潮呻吟| 亚洲国产99| 国产中文一区二区三区| 欧美日本在线看| 国产精品一区=区| 欧美激情视频一区二区三区免费| 欧美系列电影免费观看| 欧美成年人网站| 国产亚洲精品久久久久久| 亚洲黄色在线| 狠狠色香婷婷久久亚洲精品| 在线一区二区视频| 日韩亚洲视频在线| 久久影院亚洲| 久久人人超碰| 国产一区二区三区四区hd| 99精品欧美一区二区蜜桃免费| 亚洲国产日韩精品| 久久久久久久高潮| 久久久久国产免费免费| 国产精品羞羞答答| 999亚洲国产精| 99综合视频| 欧美大片专区| 亚洲欧洲免费视频| 亚洲精品午夜精品| 欧美成人综合| 欧美激情一区二区三区 | 欧美日本网站| 亚洲精品免费一二三区| 亚洲免费精品| 欧美精品123区| 亚洲片国产一区一级在线观看| 亚洲精品乱码久久久久久久久| 久久久久久久一区| 欧美成熟视频| 亚洲精品影院| 欧美日韩性生活视频| 一本色道久久综合亚洲精品不 | 欧美成人免费一级人片100| 美日韩在线观看| 亚洲国产裸拍裸体视频在线观看乱了 | 亚洲视频一区二区免费在线观看| 欧美精品在线一区二区| 亚洲精品中文字幕在线| 亚洲男女自偷自拍图片另类| 国产精品免费一区二区三区在线观看| 国产精品99久久久久久久vr| 欧美一区二区精品久久911| 国产午夜精品全部视频播放| 欧美一区二区三区免费视频| 毛片基地黄久久久久久天堂| 亚洲激情午夜| 国产精品激情av在线播放| 欧美一级淫片aaaaaaa视频| 美脚丝袜一区二区三区在线观看 | 一本一本久久| 国产精品免费视频观看| 久久久久久久综合| 亚洲精品美女在线| 久久精彩免费视频| 亚洲精品国产精品国产自| 欧美性猛片xxxx免费看久爱| 欧美在线视频一区二区| 亚洲黄一区二区| 老鸭窝亚洲一区二区三区| 一区二区三区回区在观看免费视频| 欧美日韩精品一区视频 | 欧美国产日韩精品| 亚洲视频精选在线| 激情久久久久久| 欧美日本国产精品| 久久成人免费| 一本色道久久综合亚洲精品不| 久久久亚洲国产美女国产盗摄| 亚洲精品视频一区二区三区| 国产欧美日韩中文字幕在线| 欧美寡妇偷汉性猛交| 亚洲永久免费| 亚洲国产天堂久久综合网| 欧美制服丝袜| 亚洲天堂激情| 亚洲精品综合精品自拍| 国产自产高清不卡| 国产精品成人一区二区网站软件| 久久亚洲综合| 欧美在线观看网站| 亚洲一区二区三区中文字幕| 亚洲精一区二区三区| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚久久调教视频| 亚洲欧美日韩精品久久久| 夜色激情一区二区|