Android解析Intent Filter的方法
本文實例講述了Android解析Intent Filter的方法。分享給大家供大家參考。具體分析如下:
匿名性質(zhì)的運(yùn)行時綁定使得理解Android如何解析一個隱式Intent到一個特定的應(yīng)用程序組件變得重要。
和你之前看到的一樣,當(dāng)使用startActivity時,隱式Intent解析到一個單一的Activity。如果存在多個Activity都有能力在特定的數(shù)據(jù)上執(zhí)行給定的動作的話,Android會從這些中選擇最好的進(jìn)行啟動。
決定哪個Activity來運(yùn)行的過程稱為Intent解析。Intent解析的目的是通過下面的過程找到可能匹配得最好的Intent Filter:
1. Android把安裝的包中可獲得的Intent Filter放到一個列表中。
2. 動作和與正在解析的Intent的種類不關(guān)聯(lián)的Intent Filter會從列表中刪除。
①. 動作匹配指Intent Filter包含特定的動作或沒有指定的動作。一個Intent Filter有一個或多個定義的動作,如果沒有任何一個能與Intent指定的動作匹配的話,這個Intent Filter在算作是動作匹配檢查失敗。
②. 種類匹配更為嚴(yán)格。Intent Filter必須包含所有在解析的Intent中定義的種類。一個沒有特定種類的Intent Filter只能與沒有種類的Intent匹配。
3. 最后,Intent的數(shù)據(jù)URI中的部分會與Intent Filter中的data標(biāo)簽比較。如果Intent Filter定義scheme,host/authority,path或mimetype,這些值都會與Intent的URI比較。任何不匹配都會導(dǎo)致Intent Filter從列表中刪除。
沒有指定data值的Intent Filter會和所有的Intent數(shù)據(jù)匹配。
①. mimetype是正在匹配的數(shù)據(jù)的數(shù)據(jù)類型。當(dāng)匹配數(shù)據(jù)類型時,你可以使用通配符來匹配子類型(例如,earthquakes/*)。如果Intent Filter指定一個數(shù)據(jù)類型,它必須與Intent匹配;沒有指定數(shù)據(jù)的話全部匹配。
②. scheme是URI部分的協(xié)議——例如,http:,mailto:,tel:。
③. host-name或“data authority”是介于URI中scheme和path之間的部分(例如,www.google.com)。匹配主機(jī)名時,Intent Filter的scheme也必須通過匹配。
④. 數(shù)據(jù)path是緊接在“data authority”的后面(例如,/ig)。path只在scheme和host-name部分都匹配的情況下才匹配。
4. 如果這個過程中多于一個組件解析出來的話,它們會以優(yōu)先度來排序,可以在Intent Filter的節(jié)點里添加一個可選的標(biāo)簽。最高等級的組件會返回。
Android本地的應(yīng)用程序組件和第三方應(yīng)用程序一樣,都是Intent解析過程中的一部分。它們沒有更高的優(yōu)先度,可以被新的Activity完全的代替,這些新的Activity宣告自己的Intent Filter能響應(yīng)相同的動作請求。
希望本文所述對大家的Android程序設(shè)計有所幫助。
相關(guān)文章
Android關(guān)于Button背景或樣式失效問題解決方法
大家好,本篇文章主要講的是Android關(guān)于Button背景或樣式失效問題解決方法,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下2022-01-01Android 圓角 ImageView類可設(shè)置弧度(代碼簡單)
這篇文章主要介紹了Android 圓角 ImageView類可設(shè)置弧度 的相關(guān)資料,需要的朋友可以參考下2016-03-03Android studio 下JNI編程實例并生成so庫的實現(xiàn)代碼
這篇文章主要介紹了Android studio 下JNI編程實例并生成so庫,需要的朋友可以參考下2017-09-09