大致能夠分爲兩個功能:html
① 封裝Android應用程序須要啓動某個組件的「意圖」java
② 做爲應用組件之間的通訊的媒介,將須要交換的數據封裝成Bundle對象,而後使用Intent來攜帶Bundle對象android
啓動Activity:startActivity(Intent intent)網站
startActivityForResult(Intent intent,int requestCode)ui
啓動Service:ComponentName startService(Intent intent)this
boolean bindService(Intent service,ServiceConnection conm,int flags)spa
啓動BroadcastReceiver:sendBroadcast(Intent intent)code
sendBroadcast(Intent intent,String recePermission)etccomponent
Intent表明了Android應用啓動一個應用的意圖,Android應用將會根據Intent來啓動指定組件,xml
至於啓動哪一個組件,就須要根據不懂的屬性值來判斷。
首先介紹一個組件的概念:包括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
1
2
3
4
5
6
7
8
9
10
|
HelloWorld1.java
Intent intent =
new
Intent();
ComponentName component =
new
ComponentName(HelloWorld1.
this
,HelloWorld2.
class
);
intent.setComponent(component);
startActivity(intent);
HelloWorld2.java
ComponentName component = getIntent().getComponent();
//能夠經過Intent獲取Component的值
|
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
Action和Category的對應表 點擊打開連接
Data屬性一般用於向Action屬性提供操做數據,Data屬性接受一個uri對象,uri一般經過以下形式的字符串來表示:
1
2
|
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值只設置了一部分,則只須要知足設置的那部分就能啓動了。
Intent的Extra屬性一般用於在多個Action之間進行數據交換,Intent的Extra屬性值應該是一個Bnudle對象,Bundle
對象就是一個Map對象,能夠存入多對key-value值
Flag屬性用於爲該Intent添加一些額外的控制旗杆,能夠調用addFlags()方法來爲Intent添加控制旗杆
Flag屬性的對應表 點擊打開連接
在不一樣的Tab頁面下的content爲一個Activity
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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
)
)
);
|
結伴旅遊,一個免費的交友網站:www.jieberu.com
推推族,免費得門票,遊景區:www.tuituizu.com