日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Android Intent和Intent Filter詳解(二)

 wanwanstudy 2012-02-11
Data

        需要操作的數(shù)據(jù)的URI和它的MIME(多用途互聯(lián)網(wǎng)郵件擴(kuò)展,Multipurpose Internet Mail Extensions)類(lèi)型. 例如, 如果action為ACTION_EDIT, 那么Data將包含待編輯的數(shù)據(jù)URI. 如果action為ACTION_CALL, Data將為tel:電話號(hào)碼的URI. 如果action為ACTION_VIEW, 則Data為http:網(wǎng)絡(luò)地址的URI.

        當(dāng)將一個(gè)intent和一個(gè)組件相匹配時(shí), 除了URI外數(shù)據(jù)類(lèi)型也很重要. 例如, 一個(gè)顯示圖片的程序不應(yīng)該用來(lái)處理聲音文件.

        數(shù)據(jù)類(lèi)型常??梢詮腢RI推斷, 特別是content:URI, 它表示該數(shù)據(jù)屬于一個(gè)content provider. 但數(shù)據(jù)類(lèi)型也可以被intent對(duì)象顯示聲明. setData()方法設(shè)置URI, 而setType()方法指定MIME類(lèi)型, setDataAndType()設(shè)置數(shù)據(jù)URI和MIME類(lèi)型. 它們可以使用getData()和getType()來(lái)讀取.

        Category

        一個(gè)字符串,包含了關(guān)于處理該intent的組件的種類(lèi)的信息. 一個(gè)intent對(duì)象可以有任意個(gè)category. intent類(lèi)定義了許多category常數(shù), 例如:

常量含義
CATEGORY_BROWSABLE目標(biāo)activity可以使用瀏覽器來(lái)顯示-例如圖片或電子郵件消息.
CATEGORY_GADGET該activity可以被包含在另外一個(gè)裝載小工具的activity中.
CATEGORY_HOME該activity顯示主屏幕,也就是用戶(hù)按下Home鍵看到的界面.
CATEGORY_LAUNCHER該activity可以作為一個(gè)任務(wù)的第一個(gè)activity,并且列在應(yīng)用程序啟動(dòng)器中.
CATEGORY_PREFERENCE該activity是一個(gè)選項(xiàng)面板.


        addCategory()方法為一個(gè)intent對(duì)象增加一個(gè)category, removeCategory刪除一個(gè)category, getCategories()獲取intent所有的category.

        Extras

        為鍵值對(duì)形式的附加信息. 例如ACTION_TIMEZONE_CHANGED的intent有一個(gè)"time-zone"附加信息來(lái)指明新的時(shí)區(qū), 而ACTION_HEADSET_PLUG有一個(gè)"state"附加信息來(lái)指示耳機(jī)是被插入還是被拔出.
intent對(duì)象有一系列put...()和set...()方法來(lái)設(shè)定和獲取附加信息. 這些方法和Bundle對(duì)象很像. 事實(shí)上附加信息可以使用putExtras()和getExtras()作為Bundle來(lái)讀和寫(xiě).

        Flags

        各種標(biāo)志. 很多標(biāo)志指示android系統(tǒng)如何啟動(dòng)一個(gè)activity(例如該activity屬于哪個(gè)任務(wù))和啟動(dòng)后如何處理它(例如, 它是否屬于最近activity列表中).

         android系統(tǒng)和應(yīng)用程序使用intent對(duì)象來(lái)送出系統(tǒng)廣播和激活系統(tǒng)定義的組件.

         Intent Resolution Intent解析

         intent有兩種:

         顯式intent使用名字來(lái)指定目標(biāo)組件. 由于組件名稱(chēng)一般不會(huì)被其它開(kāi)發(fā)者所熟知, 這種intent一般用于應(yīng)用程序內(nèi)部消息-- 例如一個(gè)activity啟動(dòng)一個(gè)附屬的service或者另一個(gè)activity.

         隱式intent不指定目標(biāo)的名稱(chēng). 一般用于啟動(dòng)其它應(yīng)用程序的組件.

         Android將顯式intent發(fā)送給指定的類(lèi). intent對(duì)象中名字唯一決定接受intent的對(duì)象.對(duì)于隱式intent, android系統(tǒng)必須找到最合適的組件來(lái)處理它. 它比較intent的內(nèi)容和intent filter.  intent filter是組件的一個(gè)相關(guān)結(jié)構(gòu), 表示其接受intent的能力. android系統(tǒng)根據(jù)intent filter打開(kāi)可以接受intent的組件. 如果一個(gè)組件沒(méi)有intent filter, 那么它只能接受顯式intent. 如果有, 則能同時(shí)接受二者.當(dāng)一個(gè)intent和intent filter比較時(shí), 只考慮三個(gè)屬性: action, data, category.extra和flag在intent解析中沒(méi)有用.

          Intent filters

          activity, service和broadcast receiver可以有多個(gè)intent filter來(lái)告知系統(tǒng)它們能接受什么樣的隱式intent. intent filter的名字很形象: 它過(guò)濾掉不想接受的intent, 留下想接受的intent. 顯式intent無(wú)視intent filter.一個(gè)組件對(duì)能做的每件事有單獨(dú)的filter. 例如, 記事本程序的NoteEditor activity有兩個(gè)filter -- 一個(gè)啟動(dòng)并顯示一個(gè)特定的記錄給用戶(hù)查看或編輯, 另一個(gè)啟動(dòng)一個(gè)空的記錄給用戶(hù)編輯.

          Filters and security Filter和安全

          一個(gè)intent filter不一定安全可靠. 一個(gè)應(yīng)用程序可以讓它的某個(gè)組件去接受隱式intent, 但是它沒(méi)法防止這個(gè)組件接受顯示intent. 其它的程序總是可以使用自定義的數(shù)據(jù)加上顯式的程序名稱(chēng)來(lái)調(diào)用該組件.

          一個(gè)intent filter是IntentFilter類(lèi)的實(shí)例, 但是它一般不出現(xiàn)在代碼中,而是出現(xiàn)在android Manifest文件中, 以<intent-filter>的形式. (有一個(gè)例外是broadcast receiver的intent filter是使用 Context.registerReceiver()來(lái)動(dòng)態(tài)設(shè)定的, 其intent filter也是在代碼中創(chuàng)建的.)

          一個(gè)filter有action, data, category等字段. 一個(gè)隱式intent為了能被某個(gè)intent filter接受, 必須通過(guò)3個(gè)測(cè)試. 一個(gè)intent為了被某個(gè)組件接受, 則必須通過(guò)它所有的intent filter中的一個(gè).

       Action 測(cè)試

java代碼:
  1. <intent-filter >
  2. <action android:name="com.example.project.SHOW_CURRENT" />
  3. <action android:name="com.example.project.SHOW_RECENT" />
  4. <action android:name="com.example.project.SHOW_PENDING" />
  5. . . .
  6. </intent-filter>
復(fù)制代碼

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多