淺談從Activity到intent-filter(意圖過濾器 )的屬性分析


Activity通常展現為一個可視化的用戶界面,可把它當做就是一個單獨的屏幕,可視化內容區域是一些具有層次關系(類似數據結構的樹)的視圖(均由View類的子類表示),每個視圖控制窗口中的一個矩形區域父視圖包含一些子視圖管理子視圖布局內容視圖是視圖層次結構中的根節點視圖直接響應用戶的動作,因此視圖(ps:按我目前的理解視圖相當於是一些控件,es:按鈕,文本域,滾動條,菜單,復選框等)是Activity與用戶交互的接口,通過調用Activity.setContentView()方法來設置展現activity的窗口的視圖(必須執行的初始化操作)。例如,一個顯示圖片的視圖,當用戶單擊這個視圖時它可能會啟動一個動作,這個動作可能會是啟動一個新的activity,實現從一個activity轉到另一個activity上。

Activity之間通過intent實現通信,intent-filter就是用來注冊Activity,Service和Broadcast Receiver 使Android知道那個應用程序(或組件)能用來響應intent請求使其可以在一片數據上執行那個動作。為了注冊一個應用程序組件為intent處理者,在其組件的manifest節點中添加一個intent-fillter標簽

使用intent-filter標簽,例如:

在AndroidManifest文件中含有如下過濾器的Activity組件為默認啟動類當程序啟動時系統自動調用它

<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> 

第一個action動作中的.MAIN為設置程序的主入口category語句表示在程序的啟動列表中出現該圖標的activity,缺少此category在程序啟動列表中就找不到該應用的圖標,整個intent-filter的作用是用於把應用圖標宣示到程序顯示列表中。      下面我們就來進一步的解析intent-filter標簽的使用:

<intent-filter android:label="@string/Asen's blog">

<action android:name="android.intent.action.MAIN" />

<action android:name="android.intent.action.VIEW" />

<action android:name="android.intent.action.EDIT" />

<category android:name="android.intent.category.DEFAULT" />

<category android:name="android.intent.category.LAUNCHER" />

<category android:name="android.intent.category.ALTERNATIVE" />

<data android:mimeType="video/mpeg" android:scheme="http".../>

<data android:mimeType="audio/mpeg" android:content="com.example.project:200/folder/subfolder/etc"/>

</intent-filter>

 

 

1.動作測試(action)

一個intent對象只能指定一個action,而一條<intent-filter>元素至少應該包含一個<action>,否則任何Intent請求都不能和該<intent-filter>匹配;

一個intent對象的action必須和intent-filter中的某一個actiong匹配,才能通過;

如果intent對象不指定action且intent-filter的action列表不為空,則通過;

2.類別測試(category)

簡單的說就是種類匹配Intent-Filter必須包含所有在解析的Intent中定義的種類。一個沒有特定種類的Intent Filter只能與沒有種類的Intent匹配,對於 IntentFilter中多余的<category>聲明並不會導致匹配失敗。有一個重要的點就是如果intent 是implicit intent(隱式意圖),android默認給加上一個CATEGORY_DEFAULT,這樣的話如果intent filter中沒有android.intent.category.DEFAULT這個category的話,匹配測試就會失敗,換句話說就是必須加上這個category。

3:數據測試(data)

data有兩部分構成,一個是數據類型,另一個是URI。每個URI包括四個屬性參數(scheme,host, port, path),形如:scheme://host:port/path, 其中,用setData()設定的Inteat請求的URI數據類型和scheme必須與IntentFilter中所指定的一致。若IntentFilter中還指定了authority或path,它們也需要相匹配才會通過測試。 Intent filter和Intent相互配合,實現了Android系統四大組件之間的信使功能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM