色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

Android Intent-Filter匹配規(guī)則解析

瀏覽:3日期:2022-09-21 13:50:39
前言

我們都知道,活動的啟動方式有兩種:一種是顯示啟動,或者很簡單,指定一個活動的class就可以了;另外一種就是隱式啟動,這種要指定action,category,data信息,例如我們在啟動系統(tǒng)相機(jī)的時候??匆幌麓a:

Intent intent = new Intent('android.media.action.IMAGE_CAPTURE'); intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri); startActivityForResult(intent,1);

其中的”android.media.action.IMAGE_CAPTURE”就是相機(jī)的action,這樣就可以啟動相機(jī)了。隱式啟動我們在平時也用的比較少,對于自己應(yīng)用中的Activity都是直接顯示啟動了。那什么時候用到隱式啟動呢?一般是在啟動別的應(yīng)用的activity的時候,例如上面講到的相機(jī)。上面講到的action,category,data就是intent-filer,也就是過濾器,篩選要啟動的activity。intentFiler有什么用?就像給自己上個標(biāo)簽。例 如,你給自己上個標(biāo)簽是大學(xué)生,那么,當(dāng)說學(xué)生出來,?G那么就匹配到你了。這個就是intentfiler的作用。用于篩選匹配。那么這三個action,category,data究竟是什么?他們的具體匹配規(guī)則又是什么樣的?上面講到intentFiler是用于啟動別的應(yīng)用,有哪些常用的intentfiler可以使用?接下來我們就來看看。

intentFilter的結(jié)構(gòu)

前面講到intentFilter包含三個:action,category,data,讓我看一下代碼熟悉一下:

<intent-filter> <action android:name='huan'/> <category android:name='android.intent.category.DEFAULT'/> </intent-filter>

另外包括我們最熟悉的:

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

這三個分別表示不同的意義。你想要啟動什么樣的activity就通過設(shè)置這些屬性來啟動到對應(yīng)的activity。當(dāng)我們自己設(shè)置intentFiler的時候也要注意他的意義性,雖然很多可以隨便設(shè)置,但是就像變量名稱一樣,不要隨便起。

Action

action是最簡單也是最常用的。

意義:這個參數(shù)表示啟動這個活動要干嘛。例如上面相機(jī)的是android.media.action.IMAGE_CAPTURE,很明顯就是拍照功能。action的本質(zhì)也是一個字符串,匹配就必須每個字符都一樣,包括大小寫。上面說過,雖然可以隨便寫這個字符串,但是要有意義。 匹配規(guī)則:action的匹配規(guī)則也很簡單,Intent中的action和intentFilter中的任意一個action匹配,那么匹配成功。但是如果Intent中的action是空的,那么匹配失敗。 Category

這個參數(shù)平時用得比較少,一般在一些比較特殊的情況才會用到

意義:這個參數(shù)平常使用的意義是表示實現(xiàn)這個action動作的類別,也就是可以響應(yīng)這個Intent的組件類別。例如上面的category android:name=”android.intent.category.LAUNCHER”,表示這個action將會在頂級執(zhí)行,什么意思呢?就是我們每次打開應(yīng)用都會打開的第一個activity。 匹配規(guī)則:可以設(shè)置多個category。但是intent中的每一個category都必須和intentFilter中的其中一條category匹配才能匹配成功。 注意:給activity設(shè)置intentFilter的時候,如果沒有其他的category,必須設(shè)置category android:name=”android.intent.category.DEFAULT”這個category。原因是startActivity或者starActivityForResult這兩個方法執(zhí)行的時候,如果intent中沒有category的話,那么就會自動加上”android.intent.category.DEFAULT”這個category。 Data

data是三個中最復(fù)雜的一個,顧名思義,這個參數(shù)就是用來傳遞數(shù)據(jù)的。data不同于前面兩個,他由兩部分組成:Uri+mimeType.我們先來看看data的組成:

<data android:scheme='' android:host='' android:port='' android:path='' android:pathPattern='' android:pathPrefix='' android:mimeType=''/>

data一共由7個參數(shù)組成,一起來看看分別是什么意思:

scheme:這個表示uri的模式,有最熟悉的http://這就是一種模式,另外安卓中還有比較常見的兩種是:content://和file://。有學(xué)過ContentProvider的讀者應(yīng)該對content模式就很熟悉了。 host,port:host是主機(jī),port是端口號,這兩個合稱authority。例如www.baidu.com這個應(yīng)該就很熟悉了吧。在ContentProvider中表示哪一個contentProvider。 path,pathPattern,pathPrefix:這三個表示路徑信息。一是完整的路徑,二是可以用通配符來表示例如image/*,三是路徑的前綴。 mimeType:這個表示媒體類型。例如image/jpeg

講完他的結(jié)構(gòu)后,有的讀者可能會發(fā)現(xiàn),這個data不就是一個地址+文件類型嗎?是的,uri本身就是地址的意思。我們平時什么時候用到data呢?舉個例子,我們調(diào)用相機(jī)拍照并存儲到指定的文件夾,那么怎么讓相機(jī)知道地址呢?就是data了,我們通過intent啟動相機(jī),并把地址放在data傳輸過去。這里的uri還涉及到安卓版本的影響有所不用,有興趣的讀者可以去了解一下。

那么,data的匹配規(guī)則是怎么樣的呢?和action是一樣的,要求intent中必須要有data,而且和intentFilter中的一個相匹配就可以匹配成功。

注意:如果在intentFilter中的data沒有設(shè)置uri,那么默認(rèn)的schme就是content和file。設(shè)置intentFilter

看完了上面知道intentFilter中的三個參數(shù)怎么去匹配了,那怎么給活動設(shè)置intentFilter,怎么給intent傳輸參數(shù)知道嗎?這個比較簡單也簡單講一下:給活動設(shè)置intentFilter比較簡單,只要在AndroidManifest中設(shè)置就可以了,看示例代碼:

<activity android:name='.MainActivity'> <intent-filter> <action android:name='android.intent.action.MAIN' /> <category android:name='android.intent.category.LAUNCHER' /> </intent-filter> </activity>

給intent設(shè)置參數(shù)也不難,一個一個來看:

action:可以在新建Intent對象的時候順便寫進(jìn)去,例如:Intent intent = new Intent('android.intent.action.GET_CONTENT');或者調(diào)用Intent的setAction方法:intent.setAction('android.intent.action.GET_CONTENT'); caterogy:通過intent的方法intent.addCategory(); data:這個比較特殊一點因為他有兩個部分:uri和mimeType。有三個方法:其中setType和setData分別是設(shè)置mimeType和uri的。但是這兩個方法都分別會清空另一個的數(shù)據(jù)。什么意思呢?例如我通過setData設(shè)置了一個uri,然后再通過setType設(shè)置一個mimeType,那么第一個的uri就會不見了,被刪除了。所以就有第三個方法:intent.setDataAndType。這個方法接受兩個參數(shù),uri和mimeType,同時設(shè)置兩個參數(shù),就不會被清除了。 常用的intentFilter

上面講到intentFilter主要是用來啟動別的應(yīng)用的,例如相機(jī),電話,那么有什么是比較常用的呢?具體可以查看這篇博客android 常用URI 值得記住。不懂得也可以百度或者評論區(qū)留言。

小結(jié)

我們上面講到intentFilter可以用來篩選要啟動的activity,同樣對于service和broadcast也是一樣,也同樣可以給他們設(shè)置intentFilter來隱式啟動對應(yīng)的組件。而平時用的最多還是隱式啟動活動,特別是在調(diào)用別的應(yīng)用的活動的時候。要掌握一些常見的調(diào)用,這也是很重要的。同時intentFilter的匹配規(guī)則也是很重要,熟記才不會在自己設(shè)置intentFilter的時候出錯。其中還有很多細(xì)節(jié)沒有講清楚,有疑問的讀者可以評論區(qū)留言。

以上就是Android Intent-Filer匹配規(guī)則解析的詳細(xì)內(nèi)容,更多關(guān)于Android Intent-Filer匹配規(guī)則的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 日本一级在线播放线观看免 | 九九国产精品 | 国产成人在线影院 | 久久精品成人欧美大片免费 | 免费国产在线观看 | 久久伊人男人的天堂网站 | 99在线精品视频 | 久在线播放 | 精品日韩一区二区三区 | 日韩中文字幕精品一区在线 | 中国美女一级黄色片 | 日本aaaa级 | 国产精品视频视频久久 | 5x性区m免费毛片视频看看 | 手机在线免费毛片 | 亚洲男人的天堂久久无 | a级毛片毛片免费很很综合 a级毛片免费 | 国产日韩久久久久69影院 | 国产成人亚洲精品 | 欧美视频在线观看免费精品欧美视频 | 九色自拍视频 | 国产精品久久久久久久久久免费 | 毛片网站观看 | 日韩欧美一中字暮 | 123成人网 | 亚洲精品综合一区二区三区在线 | 久久精品亚洲乱码伦伦中文 | 亚洲经典在线 | 欧洲成人免费视频 | 国产精品三级在线播放 | 成人免费公开视频 | 国内久久 | 538在线视频二三区视视频 | 国产爽的冒白浆的视频高清 | 亚洲99爱| 国产亚洲精品久久久久久无 | 国产精品揄拍一区二区久久 | 性色午夜视频免费男人的天堂 | bt天堂国产亚洲欧美在线 | 波多野结衣一区二区在线 | 久久www免费人成_看片高清 |