自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Android開(kāi)發(fā)速成簡(jiǎn)潔教程七:Intents和Intent Filters

移動(dòng)開(kāi)發(fā) Android
Android應(yīng)用中的三個(gè)核心組件:Activities,Services和broadcast receivers都是通過(guò)稱為“Intent”的消息來(lái)激活的。Intent本身為一個(gè)數(shù)據(jù)載體,可以描述想要執(zhí)行的操作以及用于這個(gè)操作的數(shù)據(jù)和其它屬性。

Android應(yīng)用中的三個(gè)核心組件:Activities,Services和broadcast receivers都是通過(guò)稱為“Intent”的消息來(lái)激活的。Android應(yīng)用一個(gè)特點(diǎn)是“低耦合”,各個(gè)Activities,Services 和broadcast receivers相當(dāng)獨(dú)立,可以看成是一個(gè)個(gè)“迷你應(yīng)用”,而Intent是這些“迷你應(yīng)用”的粘合劑,Intent不但可以用于同一個(gè) Application之間Activities,Services和broadcast receivers的交互,也可以用于不同Application之間Activities,Services和broadcast receivers的交互。

Intent本身為一個(gè)數(shù)據(jù)載體,可以描述想要執(zhí)行的操作以及用于這個(gè)操作的數(shù)據(jù)和其它屬性。用個(gè)容易理解的概念,在訪問(wèn)網(wǎng)站時(shí),我們需要提供網(wǎng)站的 URL,有時(shí)還需要通過(guò)URL參數(shù),在Android世界里,Intent 的功能類似于URL,Android操作系統(tǒng)根據(jù)Intent來(lái)觸發(fā)對(duì)于的Activitives,Services或是Broadcast Receivers。

Android應(yīng)用中的三個(gè)核心組件:Activities,Services和broadcast receivers都是通過(guò)Intent來(lái)觸發(fā)的,當(dāng)它們觸發(fā)的機(jī)制各不相同,而且不會(huì)有重疊,也就是說(shuō)發(fā)給Activity的Intent不會(huì)激活 Service或是broadcast receivers,發(fā)給broadcast receivers的Intent也不會(huì)觸發(fā)Activity和Service。

  1. Activity 通過(guò)方法 Context.startActivity() 和 Activity.startActivityForResult()來(lái)調(diào)用。以函數(shù)調(diào)用為參考startActivity() 相當(dāng)于調(diào)用無(wú)返回值的函 數(shù),startActivityForResult()調(diào)用的Activity有返回值,可以通過(guò)Activity.setResult()來(lái)返回結(jié)果。
  2.  Context.startService()用來(lái)初始化Service,Context.bindService()可以用來(lái)建立與目標(biāo)Service之間的連接,如果Service沒(méi)有運(yùn)行,則會(huì)啟動(dòng)該Service。
  3. Broadcast Receiver是通過(guò)  Context.sendBroadcast(), Context.sendOrderedBroadcast(), 和Context.sendStickyBroadcast()來(lái)觸發(fā)的。大部分的Broadcast消息來(lái)自于Android操作系統(tǒng),如電池狀態(tài),來(lái) 電,短消息等。

和URL不太一樣的是,URL和網(wǎng)站一般是一一對(duì)應(yīng)的,而一個(gè)Intent可以用來(lái)觸發(fā)某個(gè)指定的Activity,Service或是 Broadcast Receiver,或是觸發(fā)多個(gè)滿足Intent條件的Activities,Services或是Broadcast Receivers。

下面來(lái)看看Android OS如何根據(jù)Intent來(lái)找到滿足觸發(fā)條件的Activity,Service或是Broadcast Receiver.  借用SQL 數(shù)據(jù)庫(kù)的概念可以更好的理解。

     SELECT (Activitives|Services|Broadcast Receivers) AS Target

     FROM  (List in AndroidManifest.xml)

     WHERE Intent Meet Target’s (Intent Filter)

意思就是從AndroidManifest.xml中定義的Activities,Services和Broadcast Receiver列表中查找符合Intent 條件的Activities,Services,或是Broadcast Receivers。所有能活被激活的Activity,Service和Broadcast Receiver都必須在AndroidManifest.xml有定義,否則Android OS無(wú)法查詢到該目標(biāo),相當(dāng)于數(shù)據(jù)庫(kù)中無(wú)記錄,即使你在代碼中定義了該Activity,Service或Broadcast Receiver。

Intent

Intent本身為一個(gè)數(shù)據(jù)載體,可以描述想要執(zhí)行的操作以及用于這個(gè)操作的數(shù)據(jù)和其它屬性。它主要包含下列信息:

Component name:可以處理該Intent的組件名稱,組件名稱指定義Activity,Service 的包和類的全名稱。比如類名為com.pstreets.gisengine.AndroidGISEngineTutorial ,包名為com.pstreets.gisengine。 組件名稱為可選項(xiàng),如果指定了,意味明確指定用來(lái)響應(yīng)該Intent的Activity,Service。

Action: 列出需要執(zhí)行的操作名稱?;蛘咴贐roadcast Intents的情況下給出發(fā)生的事件名稱。

Constant Target component Action
ACTION_CALL activity 開(kāi)始打電話.
ACTION_EDIT activity 顯示編輯對(duì)話框.
ACTION_MAIN activity 作為一個(gè)任務(wù)(應(yīng)用)的起始Activity,對(duì)于可以從Android應(yīng)用列表的應(yīng)用來(lái)說(shuō),都需要在AndroidManifest.xml 中設(shè)置ACTION_MAIN的Intent-Filter屬性。
ACTION_SYNC activity 同步數(shù)據(jù).
ACTION_BATTERY_LOW broadcast receiver 電池電量低告警.
ACTION_HEADSET_PLUG broadcast receiver 耳機(jī)插入或拔出.
ACTION_SCREEN_ON broadcast receiver 屏幕打開(kāi)或關(guān)閉.
ACTION_TIMEZONE_CHANGED broadcast receiver 時(shí)區(qū)變動(dòng).

Data:定義不數(shù)據(jù)的URL以及數(shù)據(jù)的MIME類型。不同的Action能夠處理的Data類型也不一樣,比如 ACTION_CALL,它處理的數(shù)據(jù)格式為tel: URI,URI為電話號(hào)碼。

Category: 定義了可以響應(yīng)Intent的附加信息,一個(gè)Intent可以指定多個(gè)Category類型。和Action類似,Android 預(yù)定義了一些Category類型:

Constant  Meaning 
CATEGORY_BROWSABLE 表示目標(biāo)Activity可以使用瀏覽器安全顯示指定連接,比如說(shuō)一個(gè)圖片或是Email消息.
CATEGORY_GADGET 表示該Activity可以當(dāng)作一個(gè)Gadget嵌入到其它可以放置Gadget的Activity中。
CATEGORY_HOME 表示還Activity是Home Screen,可以設(shè)置這個(gè)屬性來(lái)替換Android自帶的Home Screen。
CATEGORY_LAUNCHER 該Activity可以顯示在Android程序管理器中。一般應(yīng)用的主Activity都會(huì)在AndroidManifest.xml 定義該屬性。

Extra:  附加Key-Value列表,可以向目標(biāo)Activity傳送附加參數(shù)。可以理解成函數(shù)調(diào)用時(shí)的參數(shù)。

Flags:指出Android啟動(dòng)目標(biāo)Activity時(shí)的一些選項(xiàng)(比如目標(biāo)Activity隸屬于那個(gè)應(yīng)用等)。

除非是Intent明確指定目標(biāo)(Explicitly)Activity的類和包名稱,這是Activity無(wú)需在 AndroidManifest.xml定義intent-filter,其它情況也叫隱含(Implicit)方式啟動(dòng)目標(biāo)Activity,在這種情 況下Android 操作系統(tǒng)查找目標(biāo)Activity,Service或是Broadcast Receiver時(shí)主要根據(jù)Intent 的Action,Data 和Category屬性來(lái)匹配定義在AndroidManifest.xml 中 Activity,Service或是Broadcast Receiver的 Intent Filters。

Intent Filters

Android中沒(méi)個(gè)有效的Activity,Service,Broadcast Receiver都必須在AndroidManifest.xml有對(duì)應(yīng)的定義。除非只使用明確調(diào)用發(fā)生來(lái)啟動(dòng)目標(biāo)Activity,每個(gè) Activity都需要定義一個(gè)intent-filter。下面是是明確指定目標(biāo)Activity的示例代碼:

  1. Intent intent=new Intent(SplashActivity.this,GNavigator.class); 
  2. startActivity(intent); 

而更一般的情況,Activity在AndroidManifest.xml具有如下定義:

  1. <activity android:name=”.AndroidGISEngineTutorial” 
  2.     android:label=”@string/app_name”> 
  3.  <intent-filter> 
  4.   <action android:name=”android.intent.action.MAIN” /> 
  5.   <action android:name=”com.example.project.SHOW_CURRENT” />    
  6.   <action android:name=”com.example.project.SHOW_RECENT” />    
  7.   <action android:name=”com.example.project.SHOW_PENDING” /> 
  8.    
  9.   …. 
  10.   <category android:name=”android.intent.category.DEFAULT” />    
  11.   <category android:name=”android.intent.category.BROWSABLE” /> 
  12.   … 
  13.    <data android:mimeType=”video/mpeg” android:scheme=”http” . . . />     
  14.    <data android:mimeType=”audio/mpeg” android:scheme=”http” . . . /> 
  15.    …. 
  16.  </intent-filter> 
  17. </activity> 

Activity的intent-filter可以包含action,category,data 子元素,給出了該Activity能夠處理的Intent的Action,Category和數(shù)據(jù)類型。Android 操作系統(tǒng)就是根據(jù)Activity的intent-filter來(lái)匹配Intent,從而觸發(fā)目標(biāo)Activity,或是 Service,Broadcast Receiver。

最常見(jiàn)的一個(gè)Intent Filter組合如下:

  1. <intent-filter . . . >    
  2.    <action android:name=”code android.intent.action.MAIN” />    
  3.    <category android:name=”code android.intent.category.LAUNCHER” /> 
  4.   </intent-filter> 

表示用戶可以從Android設(shè)備的應(yīng)用程序管理器啟動(dòng)該Activity,這個(gè)Activity為應(yīng)用的主Activity,主Activity可以再使用Intent觸發(fā)或是啟動(dòng)其它Activity。

責(zé)任編輯:閆佳明 來(lái)源: imobilebbs
相關(guān)推薦

2013-12-26 15:10:08

Android開(kāi)發(fā)應(yīng)用和框架Linux 內(nèi)核

2013-12-26 15:43:07

Android開(kāi)發(fā)Android應(yīng)用Activities

2013-12-26 15:18:09

Android開(kāi)發(fā)安裝開(kāi)發(fā)環(huán)境

2013-12-27 14:05:22

Android開(kāi)發(fā)Android應(yīng)用Dialog

2013-12-27 14:16:43

Android開(kāi)發(fā)Android應(yīng)用線程

2013-12-27 14:34:46

Android開(kāi)發(fā)Android應(yīng)用短信觸發(fā)示例

2013-12-27 13:27:05

Android開(kāi)發(fā)Android應(yīng)用RadioButton

2013-12-27 16:06:10

Android開(kāi)發(fā)Android應(yīng)用發(fā)布應(yīng)用

2013-12-26 15:46:30

Android開(kāi)發(fā)Android應(yīng)用用戶界面設(shè)計(jì)

2013-12-26 15:34:19

Android開(kāi)發(fā)Android應(yīng)用基本概念

2013-12-26 16:59:12

Android開(kāi)發(fā)Android應(yīng)用數(shù)據(jù)綁定Data Bi

2013-12-27 13:49:22

Android開(kāi)發(fā)Android應(yīng)用Button

2013-12-27 12:51:44

Android開(kāi)發(fā)Android應(yīng)用引路蜂

2013-12-27 15:31:26

Android開(kāi)發(fā)Android應(yīng)用資源Resources

2013-12-26 16:46:21

2013-12-26 17:08:36

Android開(kāi)發(fā)Android應(yīng)用自定義Adapter顯

2013-12-27 13:00:30

Android開(kāi)發(fā)Android應(yīng)用Context Men

2013-12-27 14:10:36

Android開(kāi)發(fā)Android應(yīng)用Transform

2013-12-27 15:11:17

Android開(kāi)發(fā)訪問(wèn)Internet繪制在線地圖

2013-12-27 12:42:15

Android開(kāi)發(fā)Android應(yīng)用引路蜂
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)