Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android intentFilter 匹配規則

android intentFilter 匹配規則

編輯:關於Android編程

1 概述

activity的啟動分為隱式和顯式兩種,要使用隱式的啟動,那麼intentFilter是非常重要的一個知識點。

這裡將講解intentFilter的匹配規則。

2 基本形式


    
        

        
        

        
    

可以看到,intentFilter中有action,category,以及data這幾種形式的信息。

3 action匹配規則

在xml中的intent-filter中可以配置多個action值,在隱式啟動的intent中,最多只能指定一個action值,要想隱式啟動成功,則必須指定這個action的值,且這個action值必須匹配上xml配置的任意一個值。

值得注意的是,action是區分大小寫的。

4 category匹配規則

在隱式啟動的intent中,系統都會默認加上android.intent.category.DEFAULT這種category,因此,在xml中也必須指定這種值,這是成功調用的前提條件。category的規則和action不大相同。分為2種情況;

intent中含有category:
那麼這些category必須都匹配上xml指定的值。

intent中沒有category:
這種情況下,系統會在intent中設置默認的category,也就是android.intent.category.DEFAULT,如果這個值能匹配上xml中指定的,那麼也能調用成功。

5 data匹配規則

data的數據相對比較復雜,我們先看看它的完整數據項:

可以看到,data由兩部分組成,一部分是mimeType代表了數據的媒體類型,其他的是URI,指定了資源的位置。

看看URI的結構:

://:/[||]
例如:
content://com.baidu.haha:8080/dir/src/text.txt
http://www.baidu.com:80/dir/src/text.txt

上面的兩種例子說明了URI的格式對。

這裡值得說明的是path,pathPrefix以及pathPattern的區別,path指的是完整的路徑,例如上訴例子中path代表“/dir/src/text.txt”,而pathPrefix代表了完整路徑的起始部分,可以是/dir也可以是/dir/src,pathPattern則是符合正則表達式的路徑,可以用正則表達式來表示路徑,從而實現匹配。值得注意的是,pathPattern使用中,如果要表達例如這類在正則表達式中有作用的字符,那麼需要進行轉義,但是寫成“*”是不行的,因為清單文件是一個xml文件,他在被系統讀取到內存的時候,會被轉義一次,當pathPattern被當作正則表達式的讀取的時候又會轉義一次,所以這裡有兩次轉義。所以,應該寫成“\”,而“\”則要寫成”\\”

data如下的兩種寫法效果一致:


    



    
    

6 注意事項

使用隱式啟動的時候,最好判斷一下是否有匹配該隱式intent的activity,否則啟動會出錯。要判斷是否有符合條件的activity有兩種方法,一是使用packageManager的resolveActivity方法,一是使用Intent的resolveActivity,如果找不到匹配的就返回null,我們可以根據返回值判斷是否有合適的activity。

看看方法:

public ActivityInfo resolveActivityInfo(PackageManager pm, int flags)

這裡的flags需要解釋一下,我們一般會使用MATCH_DEFAULT_ONLY這個標志位,因為這個標志位代表了,僅僅返回在xml中聲明了android.intent.category.DEFAULT的activity,而這是隱式啟動成功的前提條件。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved