新聞中心
本篇內(nèi)容主要講解“android中Intent的用法介紹”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“android中Intent的用法介紹”吧!
在android中,Intent的使用可算是無處不在,它起到了媒介的作用,可以當做一條指令,或者一種協(xié)議。它的作用是告訴android系統(tǒng)要做什么和怎么做
該Intent對象組要由六部分,分別是Component name,Action,Data,Category,Extras以及Flags。那么這些部分分別起到什么作用,以及在何時應(yīng)該如何使用呢,下面做一下簡單的講解。
1,Component name
顧名思義,這指的是組件的名稱。即要把該Intent對象傳遞給它的那個組件。組件名稱對象由ComponentName類來描述,包含包名稱和類名稱,并且該組件肯定會被聲明在AndroidManifest.xml中。
組件名稱通過 setComponent(),setClass(),setClassName()設(shè)置,通過getComponent()獲取。
需要注意的是Component name是一個可選項,如果被設(shè)置,那么Intent對象就顯式指定了要轉(zhuǎn)向的組件,如果沒有被設(shè)置,則Intent對象需要根據(jù)其他信息進行篩選查找。
例如:當前有LocalService1和LocalService2兩個Service,并在AndroidManifest.xml文件中的配置如下:
|
String packageName = getPackageName() ; Intent intent = new Intent() ; intent.setComponent(component) ; |
intent.setClassName(packageName,className) ; |
這我們指定了Intent會被發(fā)送到的對象為LocalService2
2,Action
這個指定的是一個動作,它是一個字符串類型。在Intent類里面定義了很多有關(guān)Action的常量,這些常量對應(yīng)的都是Android系統(tǒng)提供的一些供用戶使用的功能。當然我們是可以自定義Action的,只需要定義一個字符串即可,但是需要注意的是,該字符串應(yīng)該使用你的應(yīng)用的包名作為前綴!
Action這部分的內(nèi)容十分的關(guān)鍵,應(yīng)該它會決定其它部分的內(nèi)容如何構(gòu)造,例如這個動作是“發(fā)郵件”,那么其它部分的內(nèi)容就需要安裝“郵件”的協(xié)議來構(gòu)造數(shù)據(jù)。 Action的不同,主要會影響Data和
Extras的不同。
Action的設(shè)置方式如下:
Intent intent = new Intent() ; intent.setAction("com.example.test.LocalService2") ; |
請思考,如果使用以下的方式來設(shè)置Intent,會啟動哪個Service
String packageName = getPackageName() ; intent.setAction("com.example.test.LocalService2") ; |
答案是啟動LocalService1,只有沒有設(shè)置Component name才會按照Action去查找。
3,Data
在講Data之前,先說說URI(統(tǒng)一資源標識符)。
互聯(lián)網(wǎng)上(包括本地)有許多的資源,包括圖片,視頻,程序等等,然而我們需要一種統(tǒng)一的標準來定位各樣的資源,這就是URI,它其實就是一個字符串而已。我們可以通過URI使用特定的協(xié)議和資源進行交互。
URI文法結(jié)構(gòu): URI協(xié)議名:協(xié)議對應(yīng)的內(nèi)容
URI協(xié)議名有很多,例如:http, ftp,mailto,file等等,每一種協(xié)議都決定了協(xié)議內(nèi)容的語法和語義,例如,如果是http協(xié)議,那么協(xié)議內(nèi)容就要指定主機名,端口號,資源路徑等;如果是mailto協(xié)議,那么協(xié)議內(nèi)容就需要指定郵箱地址等。
在android中,動作和數(shù)據(jù)是匹配的,Data描述的是相應(yīng)動作要處理的數(shù)據(jù)資源信息。Data所包含的內(nèi)容如下:
那么在使用的時候哪些需要設(shè)置,哪些不需要設(shè)置呢? 這其實和使用Intent的那個組件有關(guān),如果那個組件是瀏覽器,那么我們可能就需要可以主機,端口號,路徑等信息。
如果AndroidManifest.xml文件中的配置為:
|
在intent-filter中指定data屬性的實際目的是:要求接收的Intent中的data必須符合intent-filter中指定的data屬性,這樣達到反向限定Intent的作用。
那么在啟動這個Service的時候,Intent的寫法如下:
Intent intent = new Intent() ; intent.setAction("com.example.test.LocalService2") ; Uri uri = Uri.parse("file://com.android.test:500/mnt/sdcard"); intent.setDataAndType(uri, "text/html") ; |
data屬性解析:android:scheme、android:host、android:port、android:path、android:mimeType
data的前四個屬性構(gòu)成了URI的組成部分,mimeType設(shè)置了數(shù)據(jù)的類型
data元素組成的URI模型如下:
scheme://host:port/path |
舉例說明(URI ):
file://com.android.test:500/mnt/sdcard |
scheme-->file:
host-->com.android.test
port-->500
path-->mnt/sdcard
其中host和port為URI的authority,如果沒有指定host,port將被忽略。
data的各屬性并不是獨立的,data的各屬性構(gòu)成了URI的整個組成部分。要使authority(host和port)有意義,必須指定scheme;要使path有意義,必須使scheme和authority(host和port)有意義。
URI和intent-filter匹配:
Intent中URI和intent-filter進行比較的時候只會進行部分的比較:
(1)當intent-filter中只設(shè)置了scheme,只會比較URI的scheme部分;
(2)當intent-filter中只設(shè)置了scheme和authority,那么只會匹配URI中的scheme和authority;
(3)當intent-filter中設(shè)置了scheme、authority和path,那么只會匹配URI中的scheme、authority、path;(path可以使用通配符進行匹配)
(4)當intent-filter中設(shè)置了mimeType,還會進行數(shù)據(jù)類型的匹配。
常用的Data的URI格式如下:
tel://:號碼數(shù)據(jù)格式,后跟電話號碼。
mailto://:郵件數(shù)據(jù)格式,后跟郵件收件人地址。
smsto://:短息數(shù)據(jù)格式,后跟短信接收號碼。
content://:內(nèi)容數(shù)據(jù)格式,后跟需要讀取的內(nèi)容。
file://:文件數(shù)據(jù)格式,后跟文件路徑。
market://search?q=pname:pkgname:市場數(shù)據(jù)格式,在Google Market里
搜索包名為pkgname的應(yīng)用。
geo://latitude,longitude:經(jīng)緯數(shù)據(jù)格式,在地圖上顯示經(jīng)緯度指定的位置。
4,Category
Intent中的類別是一種被執(zhí)行動作的額外信息。Category是一個字符串,在Intent中提供了一些默認的Category字符串常量。例如 LAUNCHER_CATEGORY 表示Intent 的接受者應(yīng)該在Launcher中作為頂級應(yīng)用出現(xiàn);而ALTERNATIVE_CATEGORY表示當前的Intent是一系列的可選動作中的一個,這些動作可以在同一塊數(shù)據(jù)上執(zhí)行。
常用的CATEGORY常量及說明:
CATEGORY_DEFAULT:Android系統(tǒng)中默認的執(zhí)行方式,按照普通Activity的執(zhí)行方式執(zhí)行?!?br/>CATEGORY_HOME:設(shè)置該組件為Home Activity。
CATEGORY_PREFERENCE:設(shè)置該組件為Preference?!?br/>CATEGORY_LAUNCHER:設(shè)置該組件為在當前應(yīng)用程序啟動器中優(yōu)先級最高的Activity,
通常為入口ACTION_MAIN配合使用。
CATEGORY_BROWSABLE:設(shè)置該組件可以使用瀏覽器啟動?!?br/>CATEGORY_GADGET:設(shè)置該組件可以內(nèi)嵌到另外的Activity中。
5,Extras
附加信息,是其它所有附加信息的集合。使用extras可以為組件提供擴展信息,比如,如果要執(zhí)行“發(fā)送電子郵件”這個動作,可以將電子郵件的標題、正文等保存在extras里,傳給電子郵件發(fā)送組件。
6,F(xiàn)lags
預(yù)定義一系列用來控制Intent行為的屬性值。
intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT); 如果activity在task存在,拿到最頂端,不會啟動新的Activity |
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 如果activity在task存在,將Activity之上的所有Activity結(jié)束掉 |
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 默認的跳轉(zhuǎn)類型,將Activity放到一個新的Task中 |
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 如果Activity已經(jīng)運行到了Task,再次跳轉(zhuǎn)不會在運行這個Activity |
到此,相信大家對“android中Intent的用法介紹”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
本文標題:android中Intent的用法介紹-創(chuàng)新互聯(lián)
路徑分享:http://fisionsoft.com.cn/article/dspoci.html