亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中Intent-Filter的匹配規則是什么

發布時間:2020-12-14 15:19:32 來源:億速云 閱讀:248 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關Android中Intent-Filter的匹配規則是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

活動的啟動方式有兩種:一種是顯示啟動,或者很簡單,指定一個活動的class就可以了;另外一種就是隱式啟動,這種要指定action,category,data信息,例如我們在啟動系統相機的時候。看一下代碼:

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

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

intentFilter的結構

前面講到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就通過設置這些屬性來啟動到對應的activity。當我們自己設置intentFiler的時候也要注意他的意義性,雖然很多可以隨便設置,但是就像變量名稱一樣,不要隨便起。

Action

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

  • 意義:這個參數表示啟動這個活動要干嘛。例如上面相機的是android.media.action.IMAGE_CAPTURE,很明顯就是拍照功能。action的本質也是一個字符串,匹配就必須每個字符都一樣,包括大小寫。上面說過,雖然可以隨便寫這個字符串,但是要有意義。

  • 匹配規則:action的匹配規則也很簡單,Intent中的action和intentFilter中的任意一個action匹配,那么匹配成功。但是如果Intent中的action是空的,那么匹配失敗。

Category

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

  • 意義:這個參數平常使用的意義是表示實現這個action動作的類別,也就是可以響應這個Intent的組件類別。例如上面的category android:name=”android.intent.category.LAUNCHER”,表示這個action將會在頂級執行,什么意思呢?就是我們每次打開應用都會打開的第一個activity。

  • 匹配規則:可以設置多個category。但是intent中的每一個category都必須和intentFilter中的其中一條category匹配才能匹配成功。

  • 注意:給activity設置intentFilter的時候,如果沒有其他的category,必須設置category android:name=”android.intent.category.DEFAULT”這個category。原因是startActivity或者starActivityForResult這兩個方法執行的時候,如果intent中沒有category的話,那么就會自動加上”android.intent.category.DEFAULT”這個category。

Data

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

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

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

  • scheme:這個表示uri的模式,有最熟悉的http://這就是一種模式,另外安卓中還有比較常見的兩種是:content://和file://。有學過ContentProvider的讀者應該對content模式就很熟悉了。

  • host,port:host是主機,port是端口號,這兩個合稱authority。例如www.baidu.com這個應該就很熟悉了吧。在ContentProvider中表示哪一個contentProvider。

  • path,pathPattern,pathPrefix:這三個表示路徑信息。一是完整的路徑,二是可以用通配符來表示例如image/*,三是路徑的前綴。

  • mimeType:這個表示媒體類型。例如image/jpeg

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

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

  • 注意:如果在intentFilter中的data沒有設置uri,那么默認的schme就是content和file。

設置intentFilter

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

<activity android:name=".MainActivity">
   <intent-filter>
    <action android:name="android.intent.action.MAIN" />

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

給intent設置參數也不難,一個一個來看:

  • action:可以在新建Intent對象的時候順便寫進去,例如:Intent intent = new Intent("android.intent.action.GET_CONTENT");或者調用Intent的setAction方法:intent.setAction("android.intent.action.GET_CONTENT");

  • caterogy:通過intent的方法intent.addCategory();

  • data:這個比較特殊一點因為他有兩個部分:uri和mimeType。有三個方法:其中setType和setData分別是設置mimeType和uri的。但是這兩個方法都分別會清空另一個的數據。什么意思呢?例如我通過setData設置了一個uri,然后再通過setType設置一個mimeType,那么第一個的uri就會不見了,被刪除了。所以就有第三個方法:intent.setDataAndType。這個方法接受兩個參數,uri和mimeType,同時設置兩個參數,就不會被清除了。

看完上述內容,你們對Android中Intent-Filter的匹配規則是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

芜湖县| 松阳县| 大英县| 河源市| 平安县| 南充市| 莱阳市| 杭锦旗| 宁蒗| 庆云县| 石河子市| 静宁县| 马山县| 灌云县| 天全县| 昌平区| 辽阳市| 平江县| 龙陵县| 剑河县| 华坪县| 灌阳县| 桃园县| 阜新市| 东台市| 青岛市| 虹口区| 丰宁| 定安县| 商洛市| 米易县| 胶州市| 衡水市| 读书| 新密市| 津南区| 平定县| 马关县| 七台河市| 土默特左旗| 明水县|