Intent以及IntentFilter詳解

2021-08-19 10:17:22 字數 4201 閱讀 9129

啟動service。service是乙個不呈現互動畫面的後台執行操作元件,可以通過將intent穿入startservice()方法來啟動乙個service來啟動服務。

傳遞廣播broadcast。廣播是任何應用都可以接收到的訊息,通過將intent傳遞給sendbroadcast()sendorderedbroadcast()sendstickybroadcast()方法,可以將廣播傳遞接收方。

intent intent = new intent(context,xxactivity.class);

startactivity(intent);

隱式intent,不指定具體的元件,但是它會宣告將要執行的操作,從而匹配到相應的元件。最簡單的android中呼叫系統撥號頁面準備打**的操作,就是隱式intent。

intent intent = new intent(intent.action_dial);

uri data = uri.parse("tel:" + "135******xx");

intent.setdata(data);

startactivity(intent);

使用顯示intent去啟動activity或者service的時候,系統將會立即啟動intent物件中指定的元件。

action,表明執行操作的字串。它會影響intent的其餘資訊,比如data、extras。該屬性可以通過setaction()方法或者intent的建構函式來設定。使用者可以自定義這個屬性,也可以使用系統中已經有的action值。下面列出啟動activity時候的一些通用action屬性。 

category,這個屬性是對處理該intent元件資訊的補充。它是乙個arrayset型別的容器,所以可以向裡面新增任意數量的補充資訊,同時,intent沒有設定這個屬性不會影響解析元件資訊。可以通過addcategory()方法來設定該屬性。下面列出一些常用的category的值。 

flags,這個屬性可以指示系統如何啟動乙個activity,以及啟動之後如何處理。例如activity屬於哪乙個task(參考activity的四種啟動方式)。

// fileurl是乙個url字串,例如 ""

intent downloadintent = new intent(context, downloadservice.class);

downloadintent.setdata(uri.parse(fileurl));

startservice(downloadintent);

// 要將textmessage資訊分享出去

intent sendintent = new intent();

sendintent.setaction(intent.action_send);

sendintent.putextra(intent.extra_text, textmessage);

sendintent.settype("text/plain");

// 確認是否有元件能夠處理這個隱式intent

if (sendintent.resolveactivity(getpackagemanager()) != null)

intent sendintent = new intent(intent.action_send);

...// 分享的標題

string title = getresources().getstring(r.string.chooser_title);

// 建立乙個呼叫選擇框的intent

intent chooser = intent.createchooser(sendintent, title);

// 確認是否有應用可以處理這個intent

if (sendintent.resolveactivity(getpackagemanager()) != null)

,使用乙個或者多個資料uri(scheme、host、port、path等等)和資料的mime型別來指定接受的資料型別

,宣告接受的intent型別

"shareactivity">

"android.intent.action.send"/>

"android.intent.category.default"/>

"text/plain"/>

android:name="mainactivity">

android:name="android.intent.action.main" />

android:name="android.intent.category.launcher" />

intent-filter>

activity>

android:name="shareactivity">

android:name="android.intent.action.send"/>

android:name="android.intent.category.default"/>

android:mimetype="text/plain"/>

intent-filter>

android:name="android.intent.action.send"/>

android:name="android.intent.action.send_multiple"/>

android:name="android.intent.category.default"/>

android:mimetype="image/*"/>

android:mimetype="video/*"/>

intent-filter>

activity>

在未來某乙個特定時間執行的intent(系統的alarmmanager執行的intent)

pendingintent.getservice(),返回乙個適用於service元件的pendingintent

pendingintent.getbroadcast(),返回乙個適用於broadcastreceiver的pendingintent

...

://:/
content:
如果沒有host部分,那麼port部分會被忽略

如果host部分和port部分都沒有,那麼path部分會被忽略

如果乙個uri宣告了scheme部分和authority部分,那麼擁有與其相同schemeauthority的uri才能匹配成功,path部分不做匹配

如果乙個uri所有的部分都宣告了,那麼只有所有部分都相同的uri才能匹配成功

如果過濾器中宣告uri但是未宣告mime型別(也不能從uri中分析出mime型別),則只有uri與過濾器uri相同且不包含ime型別的隱式intent才能匹配成功

如果過濾器宣告mime型別但是未宣告uri,只有包含相同mime型別但是不包含uri的隱式intent才能匹配成功

如果過濾器宣告了uri和mime型別(既可以是直接設定,也可以是從uri分析出來),只有包含相同的uri和mime型別的隱式intent才能匹配成功

Intent和Intent過濾器

intent 是乙個訊息傳遞物件,您可以使用它從其他應用元件請求操作。儘管 intent 可以通過多種方式促進元件之間的通訊,但其基本用例主要包括以下三個 intent startupintent new intent intent.action main startupintent.addcate...

Intent使用和Intent過濾器

功能 處理顯式intent和隱式intent 如果元件不含有過濾器,只能接受顯式intent 在使用intent過濾器測試intent物件時,僅測試三個方面 action,data和category 使用方法 配置檔案中標籤內 例外 context.registerreceiver 動態註冊broa...

顯式Intent和隱式Intent

size medium size medium 2011 09 12 09 35 顯式intent和隱式intent區別 android當中顯式intent和隱式intent的區別 定義 intent定義 intent是一種在不同元件之間傳遞的請求訊息,是應用程式發出的請求和意圖。作為乙個完整的訊息...