Android----Intent詳解

來源:互聯網
上載者:User

Android----Intent詳解

1.Intent對於Android應用的作用

大體可以分為兩個功能:

① 封裝Android應用程式需要啟動某個組件的“意圖”

② 作為應用組件之間的通訊的媒介,將需要交換的資料封裝成Bundle對象,然後使用Intent來攜帶Bundle對象

2.Intent對象詳解 2.1 使用Intent啟動系統組件

啟動Activity:startActivity(Intent intent)

startActivityForResult(Intent intent,int requestCode)

啟動Service:ComponentName startService(Intent intent)

boolean bindService(Intent service,ServiceConnection conm,int flags)

啟動BroadcastReceiver:sendBroadcast(Intent intent)

sendBroadcast(Intent intent,String recePermission)etc

2.2 Intent的屬性及intent-filter配置

Intent代表了Android應用啟動一個應用的意圖,Android應用將會根據Intent來啟動指定組件,

至於啟動哪個組件,就需要根據不懂的屬性值來判斷。

2.2.1 Component屬性

首先介紹一個組件的概念:包括Service(服務),Activity(活動),Content(內容),

Intent(意圖),BroadcastRece(廣播),Notification(通知)

Intent的Component(成分)屬性接受一個叫做ComponentName的值,ComponentName的結構器有:

Component(String pkg)//建立pkg所在包下的cls類所對應的所有組件

Component(String pkg,String cls)//建立pkg所對應的包下的cls類所對應的組件

Component(String pkg,Class cls)//建立pkg所對應的包下的cls類所對應的組件

他們的都是根據包明和類名去確定一個組件 然後啟動它

還可以通過Intent的setClass(Context package,Class cls),setClassName(Context packageContext,String className)

setClassName(Strong packageName,String className)來指定該Intent要啟動的組件

這種明確的指定啟動哪個組件的叫做顯式Intent 還有一種根據規則去啟動和服規則的組件的叫做隱式Intent

for example

HelloWorld1.javaIntent intent = new Intent();ComponentName component = new ComponentName(HelloWorld1.this,HelloWorld2.class);intent.setComponent(component);startActivity(intent);HelloWorld2.javaComponentName component = getIntent().getComponent();//可以通過Intent擷取Component的值

2.2.2 Action、Category屬性與intent-filter配置

Intent的Action、Category屬性都是一個普通的字串,其中Action代表該Intent所要完成的一個抽象動作,而Category則用於

為Action增加額外的附近類別資訊。通常Action與Category屬性會結合使用。

當一個Activity或者其他的組件的配置資訊中的Action和Category的值是多少。通常包括0~N個子項目

0~N個子項目 和 0~1個子項目。這就是相當一個妹子要找嫩朋友的條件。

當Intent設定的Action和Category全部滿足組件的Action和Category時,該組件就會被開啟了,這就相當於一個男孩子完全滿足了妹子找的

條件後就在一起了。

一般來說,Intent一般只會指定一個Action,但是可以指定多個Category

2.2.3 指定Action、Category調用系統Activity

Action和Category的對應表 點擊開啟連結

2.2.4 Data、Type屬性與intent-filter配置

Data屬性通常用於向Action屬性提供操作資料,Data屬性接受一個uri對象,uri通常通過如下形式的字串來表示:

      content://com.android.contacts/contacts/1      tel:123
uri字串要滿足如下格式:

scheme://host:port/path

content是scheme部分,com.android.contacts是host部分,port部分被省略,/contacts/1是path部分

Type屬性用於指定該Data所指定uri對應的MIME類型,這種MIME類型可以是任何自訂的MIME類型,

只要符合abc/xyz格式的字串即可。

Type和Data屬性有時候會相互覆蓋,例如:Intent先設定Data屬性再設定Type屬性,Tpye就會覆蓋Data

屬性,反之亦然。解決方案就是設定調用setDataAndType()方法

對應的,在AndroidMainifest.xml檔案中通過元素來設定Type,Data屬性值

元素支援如下屬性:

mimeType:用於聲明該組件所匹配的Intent的Type屬性

scheme:用於聲明該組件所匹配Intent的Data屬性的scheme部分

data:用於聲明該組件所匹配的Intent的Data屬性的host部分

host:用於聲明該組件所匹配的Intent的Data屬性的host部分

port:用於聲明該組件所匹配的Intent的Data屬性的port部分

path:用於聲明該組件所匹配的Intent的Data屬性的path部分

pathPrefix:用於聲明該組件所匹配的Intent的Data屬性的path首碼

pathPattern:用於聲明該組件所匹配的Intent的Data屬性的path字串模板

啟動組件的時候Type必須完全符合,但是Intent的data值只設定了一部分,則只需要滿足設定的那部分就能啟動了。

2.2.5 Extra屬性

Intent的Extra屬性通常用於在多個Action之間進行資料交換,Intent的Extra屬性值應該是一個Bnudle對象,Bundle

對象就是一個Map對象,可以存入多對key-value值

2.2.6 Flag屬性

Flag屬性用於為該Intent添加一些額外的控制旗杆,可以調用addFlags()方法來為Intent添加控制旗杆

Flag屬性的對應表 點擊開啟連結

2.3 使用Intent建立Tab頁面

在不同的Tab頁面下的content為一個Activity

TabHost tabHost = getTabHost();TabHost.addTab(tabHost.newTabSpec("tab1")                  .setIndicator("已接電話")                  .setContent(new Intent(this,HelloWorld1.class)                                   )                   );TabHost.addTab(tabHost.newTabSpec("tab2")                  .setIndicator("未接電話")                  .setContent(new Intent(this,HelloWorld2.class)                                   )                   );TabHost.addTab(tabHost.newTabSpec("tab3")                  .setIndicator("呼出電話")                  .setContent(new Intent(this,HelloWorld3.class)                                   )                   );


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.