Intent及IntentFilter具體解釋

2021-09-07 11:20:16 字數 2273 閱讀 9400

intent用於啟動activity, service, 以及broadcastreceiver三種元件, 同一時候還是元件之間通訊的重要媒介.

使用intent啟動元件的優勢

1, intent為元件的啟動提供了一致的程式設計模型. 不管想要啟動的元件是activity, service, 還是broadcastreceiver, 都能夠使用intent封裝啟動的意圖.

2, 在某些時候, 應用程式僅僅是想啟動具有某種特徵的元件, 並不想和某個特定的元件耦合. 使用intent能夠方便的達到這樣的高層次解耦的目的.

intent的component屬性

intent物件的setcomponent(componentname comp)方法用於設定intent的component屬性. componentname包括例如以下幾個構造器:

componentname(string pkg, string cls)

componentname(context pkg, string cls)

componentname(context pkg, class<?

intentfilter與隱式intent

android系統處理隱式intent時, 會比較intent和intentfilter的action, data, category屬性, 假設以上3個屬性全都相符的話, 則intentfilter所屬的component就能夠作為目標元件的候選(存在多個符合條件的component時). 

1. 測試action屬性. intent最多僅僅能定義1個action, 而filter能夠定義1個或多個action. 

通過action測試的條件為: filter定義了intent的action. 比如intent的action為"android.intent.action.main", 則定義了"android.intent.action.main"這個action的filter都能通過action測試(當然, filter還能夠包括很多其它額外的action).

假設filter未定義action, 則這個filter將堵塞全部intent. 假設intent未定義action, 那麼僅僅要filter定義了action就能夠通過action測試. 

2. 測試category屬性. intent能夠隨意多個category, filter也能夠隨意個category. 通過category測試的條件為: filter定義了intent的全部category. 比如intent定義了"android.intent.category.default"和"cn.xing.intent.category.upload"這2個category, 則定義了以上2個category屬性的filter才幹通過測試(當然, filter還能夠包括很多其它額外的category).

依據上面的規則, 假設乙個intent未定義category, 則全部filter都能夠通過category測試. 可是有一種例外: 以startactivity(intent)方式啟動乙個activity時, 系統為會intent新增乙個值為"android.intent.category.default"的category, 這就意味著每個期望通過category測試的activity, 都要在其filter中定義"android.intent.category.default"(除了作為程式入口的activity).

3. 測試data屬性. intent最多僅僅能定義1個data, filter則能夠定義多個data.

通過data測試的條件為:

a. 假設intent沒有指定data和data type, 則僅僅有未定義data和date type的filter才幹通過測試;

b. 假設intent定義了data未定義data type, 則僅僅有定義了同樣data且未定義date type的filter才幹通過測試;

c. 假設intent未定義data卻定義了data type, 則僅僅有未定義data且定義了同樣的data type的filter才幹通過測試;

d. 假設intent既定義了data也定義了data type, 則僅僅有定義了同樣的data和data type的filter才幹通過測試.

data屬性是乙個uri, uri中包括scheme, host, post和path, 典型的uri為:

scheme://host:port/path

scheme, host, post和path都是可選的. 比較2個data時, 僅僅比較filter中包括的部分. 比方filter的乙個data僅僅是指定了scheme部分, 則測試時僅僅是比較data的scheme部分, 僅僅要兩者的scheme部分同樣, 就視為"同樣的data".

bundle及intent傳遞接收資料

在兩個activity傳遞資料是我們通常都用intent來傳遞 傳遞簡單資料型別時可以直接用inten.putextras 也可以吧引數放到bundle接著intent.putextras bundle 傳遞intent intent new intent intent.setclass conta...

Intent介紹及使用方法

intent在android開發的應用非常常見,今天我就帶給大家簡單講一下intent的相關知識及其用法。意圖,描述的是應用的動作及其對應的資料。activity service broadcastreceiver之間的通訊以intent為通訊載體 3.1指定當前元件要完成的動作 分為顯式和隱式意圖...

6 2 6 7 Intent解釋及使用

1 intent的作用 是即將執行的動作的描述,一般作為引數,如startactivity 來啟動activity,broadcaseintent 來傳遞給broadcasereceiver,由startservice bindservice 來啟動乙個後台的service。2 intent的組成 ...