欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

android中Intent的用法介紹

本篇內(nèi)容主要講解“android中Intent的用法介紹”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“android中Intent的用法介紹”吧!

目前創(chuàng)新互聯(lián)建站已為上1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計(jì)、萬載網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

在android中,Intent的使用可算是無處不在,它起到了媒介的作用,可以當(dāng)做一條指令,或者一種協(xié)議。它的作用是告訴android系統(tǒng)要做什么和怎么做

該Intent對(duì)象組要由六部分,分別是Component name,Action,Data,Category,Extras以及Flags。那么這些部分分別起到什么作用,以及在何時(shí)應(yīng)該如何使用呢,下面做一下簡單的講解。

1,Component name

顧名思義,這指的是組件的名稱。即要把該Intent對(duì)象傳遞給它的那個(gè)組件。組件名稱對(duì)象由ComponentName類來描述,包含包名稱和類名稱,并且該組件肯定會(huì)被聲明在AndroidManifest.xml中。

組件名稱通過 setComponent(),setClass(),setClassName()設(shè)置,通過getComponent()獲取。

需要注意的是Component name是一個(gè)可選項(xiàng),如果被設(shè)置,那么Intent對(duì)象就顯式指定了要轉(zhuǎn)向的組件,如果沒有被設(shè)置,則Intent對(duì)象需要根據(jù)其他信息進(jìn)行篩選查找。

例如:當(dāng)前有LocalService1和LocalService2兩個(gè)Service,并在AndroidManifest.xml文件中的配置如下:

<service android:name=".services.LocalService1">
      <intent-filter>
          <action android:name="com.example.test.LocalService1" />
      </intent-filter>
</service> 

<service android:name=".services.LocalService2">
       <intent-filter>
           <action android:name="com.example.test.LocalService2" />
        </intent-filter>
</service>

String packageName = getPackageName() ;
String className = LocalService2.class.getName() ;
ComponentName component = new ComponentName(packageName, className);

Intent intent = new Intent() ;

intent.setComponent(component) ;

intent.setClassName(packageName,className) ;

這我們指定了Intent會(huì)被發(fā)送到的對(duì)象為LocalService2

2,Action

這個(gè)指定的是一個(gè)動(dòng)作,它是一個(gè)字符串類型。在Intent類里面定義了很多有關(guān)Action的常量,這些常量對(duì)應(yīng)的都是Android系統(tǒng)提供的一些供用戶使用的功能。當(dāng)然我們是可以自定義Action的,只需要定義一個(gè)字符串即可,但是需要注意的是,該字符串應(yīng)該使用你的應(yīng)用的包名作為前綴!

Action這部分的內(nèi)容十分的關(guān)鍵,應(yīng)該它會(huì)決定其它部分的內(nèi)容如何構(gòu)造,例如這個(gè)動(dòng)作是“發(fā)郵件”,那么其它部分的內(nèi)容就需要安裝“郵件”的協(xié)議來構(gòu)造數(shù)據(jù)。 Action的不同,主要會(huì)影響Data和

Extras的不同。

Action的設(shè)置方式如下:

Intent intent = new Intent() ;
intent.setAction("com.example.test.LocalService2") ;

請(qǐng)思考,如果使用以下的方式來設(shè)置Intent,會(huì)啟動(dòng)哪個(gè)Service

String packageName = getPackageName() ;
String className = LocalService1.class.getName() ;
Intent intent = new Intent() ;
intent.setClassName(packageName,className) ; 

intent.setAction("com.example.test.LocalService2") ;

答案是啟動(dòng)LocalService1,只有沒有設(shè)置Component name才會(huì)按照Action去查找。

3,Data

在講Data之前,先說說URI(統(tǒng)一資源標(biāo)識(shí)符)。

互聯(lián)網(wǎng)上(包括本地)有許多的資源,包括圖片,視頻,程序等等,然而我們需要一種統(tǒng)一的標(biāo)準(zhǔn)來定位各樣的資源,這就是URI,它其實(shí)就是一個(gè)字符串而已。我們可以通過URI使用特定的協(xié)議和資源進(jìn)行交互。 

URI文法結(jié)構(gòu):URI協(xié)議名:協(xié)議對(duì)應(yīng)的內(nèi)容

URI協(xié)議名有很多,例如:http, ftp,mailto,file等等,每一種協(xié)議都決定了協(xié)議內(nèi)容的語法和語義,例如,如果是http協(xié)議,那么協(xié)議內(nèi)容就要指定主機(jī)名,端口號(hào),資源路徑等;如果是mailto協(xié)議,那么協(xié)議內(nèi)容就需要指定郵箱地址等。

在android中,動(dòng)作和數(shù)據(jù)是匹配的,Data描述的是相應(yīng)動(dòng)作要處理的數(shù)據(jù)資源信息。Data所包含的內(nèi)容如下:

<data android:scheme=""/>
<data android:host=""/>
<data android:port=""/>
<data android:mimeType=""  />
<data android:path=""/>
<data android:pathPrefix=""/>

<data android:pathPattern=""/>
<data android:ssp=""/>
<data android:sspPrefix=""/>
<data android:sspPattern=""/>

那么在使用的時(shí)候哪些需要設(shè)置,哪些不需要設(shè)置呢? 這其實(shí)和使用Intent的那個(gè)組件有關(guān),如果那個(gè)組件是瀏覽器,那么我們可能就需要可以主機(jī),端口號(hào),路徑等信息。

如果AndroidManifest.xml文件中的配置為:

<service android:name=".services.LocalService2">
         <intent-filter>
            <action android:name="com.example.test.LocalService2" />
            <category android:name="android.intent.category.DEFAULT" />

            <data android:scheme="file"/> 

            <data android:mimeType="text/html"  />
         </intent-filter>

</service>

在intent-filter中指定data屬性的實(shí)際目的是:要求接收的Intent中的data必須符合intent-filter中指定的data屬性,這樣達(dá)到反向限定Intent的作用。

那么在啟動(dòng)這個(gè)Service的時(shí)候,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è)屬性構(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的各屬性并不是獨(dú)立的,data的各屬性構(gòu)成了URI的整個(gè)組成部分。要使authority(host和port)有意義,必須指定scheme;要使path有意義,必須使scheme和authority(host和port)有意義。

URI和intent-filter匹配:
Intent中URI和intent-filter進(jìn)行比較的時(shí)候只會(huì)進(jìn)行部分的比較:
(1)當(dāng)intent-filter中只設(shè)置了scheme,只會(huì)比較URI的scheme部分;
(2)當(dāng)intent-filter中只設(shè)置了scheme和authority,那么只會(huì)匹配URI中的scheme和authority;
(3)當(dāng)intent-filter中設(shè)置了scheme、authority和path,那么只會(huì)匹配URI中的scheme、authority、path;(path可以使用通配符進(jìn)行匹配)
(4)當(dāng)intent-filter中設(shè)置了mimeType,還會(huì)進(jìn)行數(shù)據(jù)類型的匹配。

常用的Data的URI格式如下:

tel://:號(hào)碼數(shù)據(jù)格式,后跟電話號(hào)碼。 
mailto://:郵件數(shù)據(jù)格式,后跟郵件收件人地址。
smsto://:短息數(shù)據(jù)格式,后跟短信接收號(hào)碼。
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í)行動(dòng)作的額外信息。Category是一個(gè)字符串,在Intent中提供了一些默認(rèn)的Category字符串常量。例如 LAUNCHER_CATEGORY 表示Intent 的接受者應(yīng)該在Launcher中作為頂級(jí)應(yīng)用出現(xiàn);而ALTERNATIVE_CATEGORY表示當(dāng)前的Intent是一系列的可選動(dòng)作中的一個(gè),這些動(dòng)作可以在同一塊數(shù)據(jù)上執(zhí)行。

常用的CATEGORY常量及說明:

   CATEGORY_DEFAULT:Android系統(tǒng)中默認(rèn)的執(zhí)行方式,按照普通Activity的執(zhí)行方式執(zhí)行。 
CATEGORY_HOME:設(shè)置該組件為Home Activity。
CATEGORY_PREFERENCE:設(shè)置該組件為Preference。 
CATEGORY_LAUNCHER:設(shè)置該組件為在當(dāng)前應(yīng)用程序啟動(dòng)器中優(yōu)先級(jí)最高的Activity,

                                            通常為入口ACTION_MAIN配合使用。 
CATEGORY_BROWSABLE:設(shè)置該組件可以使用瀏覽器啟動(dòng)。 
CATEGORY_GADGET:設(shè)置該組件可以內(nèi)嵌到另外的Activity中。

5,Extras

附加信息,是其它所有附加信息的集合。使用extras可以為組件提供擴(kuò)展信息,比如,如果要執(zhí)行“發(fā)送電子郵件”這個(gè)動(dòng)作,可以將電子郵件的標(biāo)題、正文等保存在extras里,傳給電子郵件發(fā)送組件。

6,F(xiàn)lags

預(yù)定義一系列用來控制Intent行為的屬性值。

intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);

如果activity在task存在,拿到最頂端,不會(huì)啟動(dòng)新的Activity

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

如果activity在task存在,將Activity之上的所有Activity結(jié)束掉

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

默認(rèn)的跳轉(zhuǎn)類型,將Activity放到一個(gè)新的Task中

intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

如果Activity已經(jīng)運(yùn)行到了Task,再次跳轉(zhuǎn)不會(huì)在運(yùn)行這個(gè)Activity

到此,相信大家對(duì)“android中Intent的用法介紹”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

分享標(biāo)題:android中Intent的用法介紹
文章來源:http://www.chinadenli.net/article18/pejddp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)網(wǎng)站排名手機(jī)網(wǎng)站建設(shè)做網(wǎng)站App設(shè)計(jì)虛擬主機(jī)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計(jì)