亚洲乱色熟女一区二区三区丝袜,天堂√中文最新版在线,亚洲精品乱码久久久久久蜜桃图片,香蕉久久久久久av成人,欧美丰满熟妇bbb久久久

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

簡述 IntentFilter(意圖過濾器)

liguoquan
2025年9月11日 17:10 本文熱度 114
:簡述 IntentFilter(意圖過濾器)


簡述 IntentFilter(意圖過濾器)

1.什么是IntentFilter ?

IntentFilter翻譯成中文就是“意圖過濾器”,主要用來過濾隱式意圖。當(dāng)用戶進行一項操作的時候,Android系統(tǒng)會根據(jù)配置的 “意圖過濾器” 來尋找可以響應(yīng)該操作的組件,服務(wù)。

例如:當(dāng)用戶點擊PDF文件的時候,Android系統(tǒng)就會通過設(shè)定好的意圖過濾器,進行匹配測試。找到能夠打開PDF文件的APP程序。

代碼:

復(fù)制代碼
復(fù)制代碼
 <activity android:name="com.example.testmain.ShowActivity" >
      <intent-filter>
            <action android:name="test.update.mydata" />
            <category android:name="my.test.show" />
            <data android:pathPattern=".*\\.jpg" android:scheme="http" />
      </intent-filter>
 </activity>
復(fù)制代碼
復(fù)制代碼

 

 

2.IntentFilter 如何過濾隱式意圖?

Android系統(tǒng)會根據(jù)我們配置的Intent Filter(意圖過濾器),來進行匹配測試。匹配的時候,只會考慮三個方面:動作、數(shù)據(jù)(URI以及數(shù)據(jù)類型)類別。也就是說Android系統(tǒng)會進行“動作測試”,“數(shù)據(jù)測試”,“類別測試”,來尋找可以響應(yīng)隱式意圖的組件或服務(wù)。

另外,當(dāng)對其他App程序開放組件和服務(wù)的時候也需要配置Intent Filter(意圖過濾器),一個Activity可以配置多個<intent-filter>。

 

3.動作測試:

對應(yīng)<intent-filter>中的<action/>標(biāo)簽;

(1) 如果<intent-filter>標(biāo)簽中有多個<action/>,那么Intent請求的Action,只要匹配其中的一條<action/>就可以通過了這條<intent-filter>的動作測試。
 
(2) 如果<intent-filter>中沒有包含任何<action/>,那么無論什么Intent請求都無法和這條<intent-filter>匹配。
 
(2) 如果Intent請求中沒有設(shè)定Action(動作),那么這個Intent請求就將順利地通過<intent-filter>的動作測試(前提是<intent-filter>中必須包含有<action/>,否則與第二條沖突)。
 
 
4.類別測試:

對應(yīng)<intent-filter>中的<category />標(biāo)簽;

(1)Intent中的類別必須全部匹配<intent-filter>中的<category />,但是<intent-filter>中多余的<category />將不會導(dǎo)致匹配失敗。

例如:Intent中有3個類別,而意圖過濾器中定義了5個,如果Intent中的3個類別都與過濾器中的匹配,那么過濾器中的另外2個,將不會導(dǎo)致類別測試失敗。

 

注意:有一個例外,Android把所有傳給startActivity()的隱式意圖當(dāng)作他們包含至少一個類別:"android.intent.category.DEFAULT" (CATEGORY_DEFAULT常量)。 因此,想要接收隱式意圖的活動必須在它們的意圖過濾器中包含"android.intent.category.DEFAULT"。(帶"android.intent.action.MAIN"和"android.intent.category.LAUNCHER"設(shè)置的過濾器是例外)

 

 

5.數(shù)據(jù)測試:

對應(yīng)<intent-filter>中的<data>標(biāo)簽;

<data>元素指定了可以接受的Intent傳過來的數(shù)據(jù)URI和數(shù)據(jù)類型,當(dāng)一個意圖對象中的URI被用來和一個過濾器中的URI比較時,比較的是URI的各個組成部分。

例如:

如果過濾器僅指定了一個scheme,所有該scheme的URIs都能夠和這個過濾器相匹配;

如果過濾器指定了一個scheme、主機名但沒有路經(jīng)部分,所有具有相同scheme和主機名的URIs都可以和這個過濾器相匹配,而不管它們的路經(jīng);

如果過濾器指定了一個scheme、主機名和路經(jīng),只有具有相同scheme、主機名和路經(jīng)的URIs才可以和這個過濾器相匹配。

當(dāng)然,一個過濾器中的路徑規(guī)格可以包含通配符,這樣只需要部分匹配即可。


比較規(guī)則如下:

(1) 一個既不包含URI也不包含數(shù)據(jù)類型的意圖對象,僅在過濾器也同樣沒有指定任何URI和數(shù)據(jù)類型的情況下才能通過測試。

(2)一個包含URI但沒有數(shù)據(jù)類型的意圖對象,僅在它的URI和一個同樣沒有指定數(shù)據(jù)類型的,過濾器里的URI匹配時才能通過測試。這通常發(fā)生在類似于mailto:和tel:這樣的URIs上:它們并不引用實際數(shù)據(jù)。

(3)一個包含數(shù)據(jù)類型但不包含URI的意圖對象,僅在這個過濾器列舉了同樣的數(shù)據(jù)類型,而且也沒有指定一個URI的情況下才能通過測試。

(4)一個同時包含URI和數(shù)據(jù)類型(或者可從URI推斷出數(shù)據(jù)類型)的意圖對象可以通過測試,如果它的類型和過濾器中列舉的類型相匹配的話。如果它的URI和這個過濾器中的一個URI相匹配或者它有一個內(nèi)容

content:或者文件file: URI,而且這個過濾器沒有指定一個URI,那么它也能通過測試。換句話說,一個組件被假定為支持 ”content: 數(shù)據(jù)“ 和 “file: 數(shù)據(jù)”,如果它的過濾器僅列舉了一個數(shù)據(jù)類型。

 

 

例如AndroidManifest.xml中有:

復(fù)制代碼
復(fù)制代碼
<intent-filter>
  <action android:name="com.nanlove.wangshiming"/>
  <action android:name="wangshiming"/>
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="wangshiming.intent.category"/>
  <data android:scheme="love" android:host="hao123.com" 
      android:port="888" android:path="/MM" android:mimeType="text/plain"/> </intent-filter>
復(fù)制代碼
復(fù)制代碼

 

對于<intent-filter>中的action項可以有多個只要匹配其中一個就可以了

 

intent.setAction("com.nanlove.wangshiming");//中的action也可以為wangshiming

intent.addCategory("wangshiming.intent.category")代碼中的addCategory并不用寫因為android他有默認(rèn)的category 只要配置清單中存在<category android:name="android.intent.category.DEFAULT" />就可以了.

沒有  "數(shù)據(jù)參數(shù)" 的情況下只要意圖對象中的設(shè)置動作和類別都出現(xiàn)在intent-filter就能跟filter匹配,但是有數(shù)據(jù)<data android:scheme="love" android:host="hao123.com"  android:port="888" android:path="/MM" />數(shù)據(jù)項一定要完全匹配。

 

當(dāng)數(shù)據(jù)和數(shù)據(jù)類型 android:mimeType="text/plain"同時存在的時候,不能使用intent.setData(Uri.parse("love://hao123.com:888/MM")) ;

因為setData的方法會自動清除前面的數(shù)據(jù)類型:This method automatically clears any type that was previously set by setType;

所以后面的setType就無法匹配,應(yīng)該使用intent.setDataAndType(Uri.parse("love://hao123.com:888/MM"), "text/plain");

 

 

提示:在同一個應(yīng)用內(nèi),能使用顯示意圖,就盡量使用顯示意圖,增加程序的效率,理論上隱式意圖匹配規(guī)則是需要花時間尋找的。

 

 

 

 參考地址:http://blog.csdn.net/zidan_2011/article/details/7433776


該文章在 2025/9/11 17:10:30 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved