91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

android中Intent的用法介紹

發布時間:2021-08-02 10:08:16 來源:億速云 閱讀:194 作者:chen 欄目:移動開發

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

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

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

1,Component name

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

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

需要注意的是Component name是一個可選項,如果被設置,那么Intent對象就顯式指定了要轉向的組件,如果沒有被設置,則Intent對象需要根據其他信息進行篩選查找。

例如:當前有LocalService1和LocalService2兩個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會被發送到的對象為LocalService2

2,Action

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

Action這部分的內容十分的關鍵,應該它會決定其它部分的內容如何構造,例如這個動作是“發郵件”,那么其它部分的內容就需要安裝“郵件”的協議來構造數據。 Action的不同,主要會影響Data和

Extras的不同。

Action的設置方式如下:

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

請思考,如果使用以下的方式來設置Intent,會啟動哪個Service

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

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

答案是啟動LocalService1,只有沒有設置Component name才會按照Action去查找。

3,Data

在講Data之前,先說說URI(統一資源標識符)。

互聯網上(包括本地)有許多的資源,包括圖片,視頻,程序等等,然而我們需要一種統一的標準來定位各樣的資源,這就是URI,它其實就是一個字符串而已。我們可以通過URI使用特定的協議和資源進行交互。 

URI文法結構: URI協議名:協議對應的內容

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

在android中,動作和數據是匹配的,Data描述的是相應動作要處理的數據資源信息。Data所包含的內容如下:

<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=""/>

那么在使用的時候哪些需要設置,哪些不需要設置呢? 這其實和使用Intent的那個組件有關,如果那個組件是瀏覽器,那么我們可能就需要可以主機,端口號,路徑等信息。

如果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屬性的實際目的是:要求接收的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的前四個屬性構成了URI的組成部分,mimeType設置了數據的類型
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的各屬性構成了URI的整個組成部分。要使authority(host和port)有意義,必須指定scheme;要使path有意義,必須使scheme和authority(host和port)有意義。

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

常用的Data的URI格式如下:

tel://:號碼數據格式,后跟電話號碼。 
mailto://:郵件數據格式,后跟郵件收件人地址。
smsto://:短息數據格式,后跟短信接收號碼。
content://:內容數據格式,后跟需要讀取的內容。 
file://:文件數據格式,后跟文件路徑。
market://search?q=pname:pkgname:市場數據格式,在Google Market里

                                                              搜索包名為pkgname的應用。
 geo://latitude,longitude:經緯數據格式,在地圖上顯示經緯度指定的位置。

4,Category

Intent中的類別是一種被執行動作的額外信息。Category是一個字符串,在Intent中提供了一些默認的Category字符串常量。例如 LAUNCHER_CATEGORY 表示Intent 的接受者應該在Launcher中作為頂級應用出現;而ALTERNATIVE_CATEGORY表示當前的Intent是一系列的可選動作中的一個,這些動作可以在同一塊數據上執行。

常用的CATEGORY常量及說明:

   CATEGORY_DEFAULT:Android系統中默認的執行方式,按照普通Activity的執行方式執行。 
 CATEGORY_HOME:設置該組件為Home Activity。
 CATEGORY_PREFERENCE:設置該組件為Preference。 
 CATEGORY_LAUNCHER:設置該組件為在當前應用程序啟動器中優先級最高的Activity,

                                            通常為入口ACTION_MAIN配合使用。 
 CATEGORY_BROWSABLE:設置該組件可以使用瀏覽器啟動。 
 CATEGORY_GADGET:設置該組件可以內嵌到另外的Activity中。

5,Extras

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

6,Flags

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

intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);

如果activity在task存在,拿到最頂端,不會啟動新的Activity

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

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

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

默認的跳轉類型,將Activity放到一個新的Task中

intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

如果Activity已經運行到了Task,再次跳轉不會在運行這個Activity

到此,相信大家對“android中Intent的用法介紹”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

曲靖市| 凤城市| 仙游县| 察雅县| 略阳县| 巴塘县| 靖江市| 乌苏市| 苍山县| 洪洞县| 四会市| 彭阳县| 建瓯市| 雷山县| 黎城县| 广水市| 红河县| 涿州市| 原阳县| 娄底市| 遂溪县| 西乌| 如东县| 衡南县| 西昌市| 梁平县| 大新县| 江油市| 苍山县| 迁安市| 景宁| 石泉县| 汝阳县| 临汾市| 长丰县| 和顺县| 昭觉县| 敖汉旗| 鄂州市| 隆德县| 五常市|