IntentFilter過濾信息:action、category、data
action:
? ? 1.Intent中的action必須能夠和過濾條件中的action匹配,過濾條件中可以有多個action。
? ? 2.Intent中如果設置多個action則過濾條件中必須至少有同樣數量的action。
? ? 3.如果Intent設置action但是并沒有相應的過濾條件與之匹配則會報ActivityNotFoundException異常。
? ? 4.Action區分大小寫。
? ? 5.intent必須要書寫設置action。(和category不同之處)。
category:
? ? 1.intent中可以不書寫category,因為在使用startActivity或者startActivityForResult時會默認給category添加“android.intent.category.DEFAULT”這個category。
? ? 2.intent中如果出現了category,不管有幾個對于沒一個category來說過濾條件中都必須有已經定義的相同的category。
data:
? ? 1.data有兩部分組成,mimeType和URI。mimeType指媒體類型,比如image/jpeg,video/*等,URI結構如下:
? ??? ??? ? <scheme>://<host>:<port>/[<path>]|[<pathPrefix>]|[<pathPattern>]
? ??? ??? ? Scheme:URI的模式,比如http、file、content等,如果URI沒有指定scheme,那么URI無效。
? ??? ??? ? Host:URI的主機名,比如www.baidu.com,如果host未指定,那么URI無效。
? ??? ??? ??? ? Port:URI的端口號,比如80,僅當Scheme和Host指定時才有效。
? ??? ??? ? Path:表示完整的路徑信息。
?? ??? ??? ??? ?PathPattern:表示完整的路徑信息,但是可以使用通配符。
? ??? ??? ? PathPrefix:路徑的前綴信息。
? ??? ?
? ? 2.如果僅指定了mimeType但是未指定URI,系統默認添加,默認值為content 或 file。
? ? 3.如果要指定完整地data,即同時包含mimeType和URI,必須使用setDataAndType()方法,例如:? ??? ??? ??? ??intent.setDataAndType(Uri.parse("file://abc"),"image/*");
? ? 4.如果先調用setData再調用setType這兩個方法會清空彼此的相關值。
可以通過PackageManager的resolveActivity(Intent intent , Int flag)對是否有匹配的Activity進行判斷,如果為null即無匹配。
也可以說使用PackageManager的queryIntentActivities(Intent intent, int flag)進行匹配,返回值為List<ResolveInfo>。
【int flag 需要使用PackageManager.MATCH_DEFAULT_ONLY】
? ??
來自為知筆記(Wiz)