1. 程式人生 > >Intent中的四個重要屬性——Action、Data、Category、Extras

Intent中的四個重要屬性——Action、Data、Category、Extras

在Java程式碼中或AndroidMainfest.xml中我們會設定Activity新增屬性時,為使用Intent(或IntentFilter).

Intent中的四個重要屬性——Action、Data、Category、Extras

Intent是聯絡Activity,Service,Broadcast之間的紐帶,其作用並不僅是簡單的資料傳遞。通過自帶的屬性,可以方便的完成很多較為複雜的操作。列如直接呼叫撥號功能,直接呼叫合適的程式開啟不同型別的檔案等,都可以通過設定Intent屬性來完成。

Intent主要有4個屬性,分別是:

Action:Action屬性的值是一個字串,它代表了系統中定義的一系列常用動作。通過setAction()方法或在清單檔案AndroidMainfest.xml中設定。預設為:DEFAULT。

Data:Dta通常是URL格式定義的操作資料。列如:tel//。通過setData()方法設定。

Category:Category屬性用於指定當前動作(Action)被執行的環境。通過addCategory()方法或在清單檔案 AndroidMainfest.xml中設定.預設為:CATEGORY_DEFAULT。

Extras:主要用於傳遞目標元件所需要的額外資料。通過putExtras()方法設定.

四個屬性各自常用值如下所示:

Action:

ACTION_MAIN:Android Application的入口,每個android應用必須且只能包含一個此型別的Action聲 明。 
ACTION_VIEW:系統根據不同的Data型別,通過已註冊的對應Application顯示資料。
ACTION_EDIT:系統根據不同的Data型別,通過已註冊的對應Application編輯示資料。 
ACTION_DIAL:開啟系統預設的撥號程式,如果Data中設定了電話號碼,則自動在撥號程式中輸入此號碼。 
ACTION_CALL:直接呼叫Data中所帶的號碼。 
ACTION_ANSWER:接聽來電。 
ACTION_SEND:由使用者指定傳送方式進行資料傳送操作。
ACTION_SENDTO:系統根據不同的Data型別,通過已註冊的對應Application進行資料傳送操作。 
ACTION_BOOT_COMPLETED:Android系統在啟動完畢後發出帶有此Action的廣播(Broadcast)。 
ACTION_TIME_CHANGED:Android系統的時間發生改變後發出帶有此Action的廣播(Broadcast)。 
ACTION_PACKAGE_ADDED:Android系統安裝了新的Application之後發出帶有此Action的廣播(Broadcast)。 
ACTION_PACKAGE_CHANGED:Android系統中已存在的Application發生改變之後(如應用更新操作)發出帶有此Action的廣播(Broadcast)。 
ACTION_PACKAGE_REMOVED:解除安裝了Android系統已存在的Application之後發出帶有此Action的廣播(Broadcast)。

Category:
   
 CATEGORY_DEFAULT:Android系統中預設的執行方式,按照普通Activity的執行方式執行。 
 CATEGORY_HOME:設定該元件為Home Activity。
 CATEGORY_PREFERENCE:設定該元件為Preference。 
 CATEGORY_LAUNCHER:設定該元件為在當前應用程式啟動器中優先順序最高的Activity,通常為入口ACTION_MAIN配合使用。 
 CATEGORY_BROWSABLE:設定該元件可以使用瀏覽器啟動。 
 CATEGORY_GADGET:設定該元件可以內嵌到另外的Activity中。
 
Extras:


  
 EXTRA_BCC:存放郵件密送人地址的字串陣列。 
 EXTRA_CC:存放郵件抄送人地址的字串陣列。
 EXTRA_EMAIL:存放郵件地址的字串陣列。 
 EXTRA_SUBJECT:存放郵件主題字串。 
 EXTRA_TEXT:存放郵件內容。 
 EXTRA_KEY_EVENT:以KeyEvent物件方式存放觸發Intent的按鍵。  
 EXTRA_PHONE_NUMBER:存放呼叫ACTION_CALL時的電話號碼。 
   
Data:

 tel://:號碼資料格式,後跟電話號碼。 
 mailto://:郵件資料格式,後跟郵件收件人地址。
 smsto://:短息資料格式,後跟簡訊接收號碼。
 content://:內容資料格式,後跟需要讀取的內容。 
 file://:檔案資料格式,後跟檔案路徑。
 market://search?q=pname:pkgname:市場資料格式,在Google Market裡搜尋包名為pkgname的應用。
geo://latitude,longitude:經緯資料格式,在地圖上顯示經緯度指定的位置。

在intent-filter中指定data屬性的實際目的是:要求接收的Intent中的data必須符合intent-filter中指定的data屬性,這樣達到反向限定Intent的作用。
例如:在AndroidManifest.xml 中進行如下設定:

<activity android:name=".MainActivity">  
<intent-filter>  
     <action android:name="com.hucc.test"/>  
     <data android:scheme="file"/>  
</intent-filter>  
</activity>  

那麼啟動該Activity的Intent必須進行如下設定:

Intent intent = new Intent();
Uri uri = Uri.parse(“file://com.android.test:180/mnt/sdcard”);
intent.setData(uri);

data屬性解析:android:scheme、android:host、android:port、android:path、android:mimeType
data的前四個屬性構成了URI的組成部分,mimeType設定了資料的型別
data元素組成的URI模型如下:
scheme://host:port/path
舉例說明:
URI file://com.android.hucc.test:180/mnt/sdcard
scheme–>file:
host–>com.android.hucc.test
port–>180
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,還會進行資料型別的匹配。

總結:
(1)在AndroidMainfest.xml 中對每一個Activity都做了說明——intent-filter,intent-filter聲明瞭需要接收怎樣的Intent,當傳送的Intent和intent-filter中定義的相符合,就會啟動相應的Activity;
(2)當有多個Activity符合傳送的Intent時,Android系統會列出所有滿足Intent的Activity,使用者可以通過選擇進行相關的操作;
(3)在一個Activity的intent-filter中可以有多個action、多個category、多個data,這樣可以有多種組合與Intent進行匹配。注意:如果在一個Activity中有多個Intent進行匹配的時候,建議使用多個intent-filter與Intent進行匹配。猜測:這樣應該可以提高Intent的匹配速度。
(4)data屬性,這是一個進行反向限制Intent的操作,要求Intent的data必須是intent-filter中宣告的資料之一(應為在一個intent-filter中可以設定多個data)。注意:如果要啟動目標Activity,但是指定的data資料型別與Activity中data資料型別不匹配,將會造成ActivityNotFoundException異常。

相關推薦

Intent重要屬性——ActionDataCategoryExtras

在Java程式碼中或AndroidMainfest.xml中我們會設定Activity新增屬性時,為使用Intent(或IntentFilter). Intent中的四個重要屬性——Action、Data、Category、Extras Intent是聯絡A

Spring Aop重要概念,切點,切面,連線點,通知

直說正題: 1. 通知: 就是我們編寫的希望Aop時執行的那個方法。我們通過Aop希望我們編寫的方法在目標方法執行前執行,或者執行後執行。 2. 切點:切點就是我們我們配置的滿足我們條件的目標方法。比

AE二次開發功能速成歸納(符號設計器創建要素圖形編輯屬性表編輯緩沖區分析)

文件夾路徑 及其 基本框架 option 開啟 rgs database ets remove /* * 實習課上講進階功能所用文檔,因為趕時間從網上抄抄改改,湊合能用,記錄一下以備個人後用。 * * --------------------------------

微積分重要的不等式:Jensen不等式平均值不等式Holder不等式Schwarz不等式Minkovski不等式 及其證明

一:幾個重要不等式的形式 1,Jensen不等式 2,平均值不等式 3,一個重要的不等式 4,Holder不等式 5,Schwarz不等式 和 Minkovski不等式

求一個矩陣連續數字(行,列,正反對角線)乘積的最大值。

最近在project Euler題目上,見到一個題覺得不錯,就花時間做了一下。 問題: a=[ [8, 2, 22,97,38,15,0,40,0,75, 4, 5, 7,78, 52, 12, 50, 77, 91, 8], [49 ,49 ,99 ,

[轉載]DevOps發展的重要階段

city gartner 探討 found 應用程序 延續 咨詢師 發展 定性 DevOps是敏捷開發的延續,它將敏捷的精神延伸至IT運營(IT Operation)階段。敏捷開發的主要目的是響應變化,快速交付價值。以2001年的敏捷宣言發布這個裏程碑為起點,開始幾年內企業

網絡爬蟲--requests庫重要的對象

resp head ppa except 代碼 http http響應 sts _for 當我們使用resquests.get()時,返回的時response的對象,他包含服務器返回的所有信息,也包含請求的request的信息。 首先: response對象的屬性有以下幾個

OrCAD: Capture CIS重要概念:instance 和 occurrences

用OrCAD設計原理圖必須理解兩個概念instance 和 occurrences。對於元件放置、替換、修改屬性等很多操作都和這兩個概念有關。   拋開抽象的說明,我們用例項說明他們的區別。假如你在自己的元件庫中已經建立了一個元件AD8056(AD公司的運放)。

Linux重要知識點

1.對於一個需求:一個專案組有好幾個使用者,所有使用者在目錄中建立檔案,可以刪除自己的檔案,但不能刪除別人的檔案,它的實現方法如下: 沾滯位:首先知道沾滯位是針對目錄來設定的。 ——許可權位 實現方法: chmod +t file:設定目錄的沾滯位 chmod

微信小程式,開發重要的知識點(加密解密,轉發,進入場景,session_key)

小程式的授權資訊:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/authorize.html   小程式的系統引數和進入場景引數等:https://developers.weixin.qq.com/

初識CSS-網頁元素的通用屬性

四個通用屬性分別是:id,class,title和style。 id相當於身份證,用來唯一標示網頁元素; class相當於標籤的類屬性,用於元素分類; title相當於元素簡介,如元素的用途; style屬性是用來描述元素的寬度,高度,顏色,輪廓等。 下面我們來舉一

DevOps社群梳理:DevOps發展的重要階段

DevOps是敏捷開發的延續,它將敏捷的精神延伸至IT運營(IT Operation)階段。敏捷開發的主要目的是響應變化,快速交付價值。以2001年的敏捷宣言釋出這個里程碑為起點,開始幾年內企業主要在軟體的開發階段推行敏捷,並沒有覆蓋到軟體的運營階段。隨著網際網路的不斷髮展,市場變化越來越快,20

linux使用者管理重要的使用者配置檔案

[[email protected] ~]# head /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin

XMLHttpRequest物件的幾種狀態和幾重要屬性以及常用的方法

XMLHttpRequest的幾種狀態: 0:  物件沒有完成初始化 1: 物件開始傳送請求 2: 物件的請求傳送完成 3: 物件開始讀取伺服器響應 4: 物件讀取伺服器響應結束 1.onreadystatechange                      指定XML

MySQL JDBC URL重要引數說明

http://www.cnblogs.com/yokoboy/archive/2013/03/01/2939315.html jdbc:mysql://[host:port],[host:port].../[database][?引數名1][=引數值1][&引數名2

工作重要的能力------談談工作兩年後的一點思考

        畢業已經兩年多了, 經歷了職場新人的最初階段,打算寫下自己的一些思考。 歡迎各位職場老鳥拍磚、指正。          第一: 持續的熱情          從嚴格意義上來講, 熱情應該不能算一種能力, 好吧, 那就算是職業素養吧。          我認

ProxyFactoryBean的幾重要屬性

<bean id="message" class="org.springframework.aop.framework.ProxyFactoryBean"><property name="interc

最小生成樹演算法的兩重要屬性Cycle Property和Partition Property

Cycle Property: T是一個帶權圖的一個最小生成樹,如果存在一條邊e後,在T中形成了一個環C。 則e必須比這個環中任何一條邊都大。 證明: 反證法:如果存在一條邊比e大,則去掉這條邊,加入e後,得到的新的最小生成樹的權重 比T還要小,矛盾。 Partitio

jQuery綁定事件的區別 on,bind,live,delegate

function delegate 速度 html 操作 cli 目標 bind 事件 1.jQ操作DOM元素的綁定事件的四種方式 jQ中提供了四種事件監聽方式,bind、live、delegate、on,對應的解除監聽的函數分別是unbind,die,unde

iot 平臺重要概念

IoT服務平臺四個重要概念修改:exp = '{\"createdDate": "",\"createdBy": "",\"username": "",\"hashedPassword": "",\"l