編輯:Android開發教程
【0】Android基本的設計理念是鼓勵減少組件間的耦合,因此Android提供了Intent (意圖) ,Intent提 供了一種通用的消息系統,它允許在你的應用程序與其它的應用程序間傳遞Intent來執行動作和產生事件。使 用Intent可以激活Android應用的三個核心組件:活動、服務和廣播接收器。
【1】Intent可以劃分成 顯式意圖和隱式意圖。
顯式意圖:調用Intent.setComponent()或Intent.setClass()方法明確指定了 組件名的Intent為顯式意圖,顯式意圖明確指定了Intent應該傳遞給哪個組件。
隱式意圖:沒有明確 指定組件名的Intent為隱式意圖。 Android系統會根據隱式意圖中設置的動作(action)、類別(category)、數 據(URI和數據類型)找到最合適的組件來處理這個意圖。
【2】對於隱式意圖,Android是怎樣尋找到 這個最合適的組件呢?
記的前面我們在定義活動時,指定了一個intent-filter,Intent Filter(意 圖過濾器)其實就是用來匹配隱式Intent的,當一個意圖對象被一個意圖過濾器進行匹配測試時,只有三個方 面會被參考到:動作、數據(URI以及數據類型)和類別。
1.動作測試
<intent- filter>元素中可以包括子元素<action>,比如:
<intent-filter>
<action android:name=”com.example.project.SHOW_CURRENT” />
<action android:name=” com.example.project.SHOW_RECENT” />
<action android:name=” com.example.project.SHOW_PENDING” />
</intent-filter>
一條<intent-filter>元 素至少應該包含一個<action>,否則任何Intent請求都不能和 該<intent-filter>匹配。如果 Intent請求的Action和<intent-filter>中個某一 條<action>匹配,那麼該Intent就通過了這條 <intent-filter>的動作測試。如果Intent請求 或<intent-filter>中沒有說明具體的Action類 型,那麼會出現下面兩種情況。
(1) 如果<intent-filter>中沒有包含任何Action類型,那麼無論什 麼Intent請求都無法和這條<intent- filter>匹配;
(2) 反之,如果Intent請求中沒有設定Action 類型,那麼只要<intent-filter>中包含有Action類型,這個 Intent請求就將順利地通過<intent- filter>的行為測試。
2.數據測試
數據在<intent-filter>中的描述如下:
<intent-filter . . . >
<data android:type=”video/mpeg” android:scheme=”http” . . . />
<data android:type=”audio/mpeg” android:scheme=”http” . . . />
</intent-filter>
<data>元素指定了希望接受的Intent請求的數據URI和數據類型, URI被分成三部分來進行匹配:scheme、 authority和path。其中,用setData()設定的Inteat請求的URI數據 類型和scheme必須與IntentFilter中所指 定的一致。若IntentFilter中還指定了authority或path,它們也需 要相匹配才會通過測試。
數據測試同時比較意圖對象和過濾器中指定的URI和數據類型。
規則 如下:
a. 一個既不包含URI也不包含數據類型的意圖對象僅在過濾器也同樣沒有指定任何URIs和數據 類型的情況下才能通過測試。
b. 一個包含URI但沒有數據類型的意圖對象僅在它的URI和一個同樣沒有 指定數據類型的過濾器裡的URI匹配時才能通過測試。這通常發生在類似於mailto:和tel:這樣的URIs上:它 們並不引用實際數據。
c. 一個包含數據類型但不包含URI的意圖對象僅在這個過濾器列舉了同樣的數 據類型而且也沒有指定一個URI的情況下才能通過測試。
d. 一個同時包含URI和數據類型(或者可從 URI推斷出數據類型)的意圖對象可以通過測試,如果它的類型和過濾器中列舉的類型相匹配的話。如果它的 URI和這個過濾器中的一個URI相匹配或者它有一個內容content:或者文件file: URI而且這個過濾器沒有指定 一個URI,那麼它也能通過測試。換句話說,一個組件被假定為支持content:和file: 數據如果它的過濾器僅 列舉了一個數據類型。
3.類別測試
<intent-filter>元素可以包含<category>子 元素,比如:
<intent-filter . . . >
<category android:name=” android.Intent.Category.DEFAULT” />
<category android:name=” android.Intent.Category.BROWSABLE” />
</intent-filter>
我們都知道,Android上的界面展示都是通過Activity實現的,Activity實在是太常用了,我相信大家都 已經非常熟悉了,這裡就不再贅述。但是Activity也
今天心血來潮,又把ADT升級了一下,升級到了ADT 22,悲催的發現項目用不了了(能編譯通過,運行出錯)。錯誤一:(警告)Unable to resolve superc
一.背景可能很多人跟我一樣,做了好久的android程序,卻一直沒有認真地坐下來好好學習下xml文件的布局。其實有的時候我們用view繪制或是利用ADT的圖形界面功能就可
如果給 Android 撰寫一個編年史,那每年的 Google I/O 都是一個新的 Android 年的開啟,它預示著 Android 在後續一年新的方向和趨勢。201