編輯:關於Android編程
大體可以分為兩個功能:
① 封裝Android應用程序需要啟動某個組件的“意圖”
② 作為應用組件之間的通信的媒介,將需要交換的數據封裝成Bundle對象,然後使用Intent來攜帶Bundle對象
啟動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
Intent代表了Android應用啟動一個應用的意圖,Android應用將會根據Intent來啟動指定組件,
至於啟動哪個組件,就需要根據不懂的屬性值來判斷。
首先介紹一個組件的概念:包括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.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或者其他的組件的配置信息
0~N個
當Intent設置的Action和Category全部滿足組件的Action和Category時,該組件就會被打開了,這就相當於一個男孩子完全滿足了妹子找的
條件後就在一起了。
一般來說,Intent一般只會指定一個Action,但是可以指定多個Category
Action和Category的對應表 點擊打開鏈接
Data屬性通常用於向Action屬性提供操作數據,Data屬性接受一個uri對象,uri通常通過如下形式的字符串來表示:
content://com.android.contacts/contacts/1 tel:123uri字符串要滿足如下格式:
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
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) ) );
轉載請注明出處王亟亟的大牛之路空了2個禮拜,終於開始有事做了,用了午休時間和下午的大概1個小時,完成了這個例子,讓小伙伴們,對一些常用的表單所需的控件,做一個溫故,再配合
現在手機屏越來越大,大家對於屏的要求也越來越高了。如果你沒有Android 手機或者是平板電腦,那麼你僅是Windows 用戶,也可以在Wind
如果做一個彈出的控件,我們可以進行添加view: 寫class SatelliteMenu extends FrameLayout private void init(C
Ionic是一款流行的移動端開發框架,但是剛入門的同學會發現,Ionic在iOS和Android的底部tabs顯示不一樣。在安卓情況下底部tabs會浮上去。如下圖展示:網