本文實(shí)例講述了Android開(kāi)發(fā)中Intent用法。分享給大家供大家參考,具體如下:
Android手機(jī)軟件開(kāi)發(fā)中,Intent作為手機(jī)軟件開(kāi)發(fā)時(shí)很重要的對(duì)象需要引起我們的重視,實(shí)際上,intent也是體現(xiàn)Android開(kāi)發(fā)具有其獨(dú)特性的一個(gè)標(biāo)志性的對(duì)象。
當(dāng)一個(gè)Activity要啟動(dòng)另外一個(gè)Activity的時(shí)候,也許一個(gè)以前較為熟悉的模式是:調(diào)用一個(gè)new函數(shù),直接創(chuàng)建具有窗口特征類(lèi)的對(duì)象,又或者直接調(diào)用一個(gè)啟動(dòng)函數(shù)來(lái)啟動(dòng)。這種方式簡(jiǎn)潔、明了,但是卻違背了Android開(kāi)發(fā)的理念。Android使用Intent來(lái)"封裝"程序的"調(diào)用意圖",不管程序想啟動(dòng)什么組件,啟動(dòng)一個(gè)Activity也好,一個(gè)service也好,或者一個(gè)Broadcast Receiver也好,Android統(tǒng)一使用Intent對(duì)象來(lái)封裝這種"啟動(dòng)意圖"。
除此之外,使用Intent也有好處,某些時(shí)候,應(yīng)用程序只是想啟動(dòng)具有某些特征的組件或者應(yīng)用程序,卻并不想和這類(lèi)程序有硬性的代碼耦合;另外,應(yīng)用程序有時(shí)候或許只是知道要啟動(dòng)的東西的一些特征,并不知道要啟動(dòng)的程序具體指的是什么(比如,某程序想啟動(dòng)發(fā)短信的應(yīng)用程序,而此時(shí)系統(tǒng)中存在多個(gè)發(fā)信息的軟件,我們無(wú)法知道要打開(kāi)什么軟件),此時(shí)程序要做的就應(yīng)該是發(fā)送一個(gè)啟動(dòng)短信應(yīng)用程序的意圖,而不是指定要打開(kāi)什么軟件。當(dāng)然更一般的,Intent也可以指定打開(kāi)那個(gè)應(yīng)用程序,而與一些程序有硬性的耦合關(guān)系。
Intent還是應(yīng)用程序組件之間通信的重要媒介,兩個(gè)Activity把需要交換的數(shù)據(jù)封裝成Bundle對(duì)象,然后使用Intent來(lái)攜帶Bundle對(duì)象,這樣就實(shí)現(xiàn)了兩個(gè)Activity之間的數(shù)據(jù)交換。
Intent存在以下幾個(gè)屬性:Component,Action,Category,Data,Type,Extra,F(xiàn)lag七個(gè)屬性,其中Component屬性用來(lái)指定需要啟動(dòng)的目標(biāo)組件,Extra屬性用于攜帶需要交換的數(shù)據(jù)。
下面對(duì)Intent對(duì)象做詳細(xì)的介紹:
1. Intent的Component屬性
Component是用來(lái)指定啟動(dòng)目標(biāo)組件的屬性,標(biāo)準(zhǔn)的啟動(dòng)代碼如下:
ComponentName comp = new ComponentName(firstActivity.this,secondActivity.class);Intent intent = new Intent();Intent. setComponent(comp);startActivity(intent);
以上代碼用來(lái)標(biāo)準(zhǔn)的創(chuàng)建ComponentName對(duì)象,進(jìn)而調(diào)用Intent對(duì)象的setComponent()函數(shù)來(lái)為Intent設(shè)定相應(yīng)的componentName,最后調(diào)用startAcitvity函數(shù)啟動(dòng)一個(gè)新的Activity。
實(shí)際上,當(dāng)需要為Intent設(shè)定Component屬性的時(shí)候,Intent已經(jīng)為我們提供了一個(gè)簡(jiǎn)單的構(gòu)造器,使用方法如下(我們經(jīng)常使用的方式):
2. Intent 的Action與Category屬性
Action和Category屬性都是普通的字符串,其中Action代表了抽象出來(lái)的"動(dòng)作",Category屬性用來(lái)和Action屬性配合使用,表達(dá)出要啟動(dòng)某組件的意圖。
具有<intent-filter…/>標(biāo)簽的Activity均有可能會(huì)被啟動(dòng)。
比如:
Public final staticString SOME_ACTION = "org.someaction.SOME_ACTION"http:// 這是一個(gè)字符轉(zhuǎn),隨便設(shè)定,但是一般都具有一些抽象的語(yǔ)義。在這個(gè)Activity種的某個(gè)按鈕的onClick()方法中加入:Intent intent = newIntent();Intent.setAction(thisActivity.SOME_ACTION);startActivity(intent);
這樣的代碼并沒(méi)有具體指出要啟動(dòng)哪個(gè)Activity,這樣就脫離了"硬編碼",但是具體要啟動(dòng)哪個(gè)Activity呢,這將取決于A(yíng)ctivity配置文件中的<intent-filter…/>標(biāo)簽。
<intent-filter…/>是AndroidManifest.xml文件中<activity…/>元素的子元素,需要做的,就是給你實(shí)際需要相應(yīng)這個(gè)意圖的Activity添加<intent-filter…/>標(biāo)簽,在<intent-filter…/>下,存在著三種標(biāo)簽:1.<action…/>2.<category…/>3.<data…/>,其中指定android:name屬性之后,這個(gè)activity便具有了相應(yīng)上面意圖的屬性了。
對(duì)于上面的意圖,則添加這樣的代碼(當(dāng)然要在<intent-filter…/>標(biāo)簽下):
實(shí)際上Android內(nèi)部提供了大量的標(biāo)準(zhǔn)的Action和Category常量。
總結(jié)如下:
| Action常量 | 對(duì)應(yīng)的android:name 設(shè)定 | 簡(jiǎn)單說(shuō)明 |
| ACTION_MAIN | Android.intent.action.MAIN | 應(yīng)用程序入口 |
| ACTION_VIEW | Android.intent.action.VIEW | 顯示指定數(shù)據(jù) |
| ACTION_ATTACH_DATA | Android.intent.action.ATTACH_DATA | 指定某模塊數(shù)據(jù)被附加的地方 |
| ACTION_EDIT | Android.intent.action.EDIT | 編輯指定數(shù)據(jù) |
| ACTION_PICK | Android.intent.action.PICK | 從列表中選擇某項(xiàng)并返回所選數(shù)據(jù) |
| ACTION_CHOOSER | Android.intent.action.CHOOSER | 顯示一個(gè)Activity選擇器 |
| ACTION_GET_CONTENT | Android.intent.action.GET_CONTENT | 讓用戶(hù)選擇數(shù)據(jù),并返回所選 |
| ACTION_DIAL | Android.intent.action.DIAL | 顯示撥號(hào)面板 |
| ACTION_SEND | Android.intent.action.SEND | 直接發(fā)送數(shù)據(jù) |
| ACTION_SENDTO | Android.intent.action.SENDTO | 直接發(fā)送消息 |
| ACTION_ANSWER | Android.intent.action.ANSWER | 應(yīng)答電話(huà) |
| ACTION_INSERT | Android.intent.action.INSERT | 插入數(shù)據(jù) |
| ACTION_DELETE | Android.intent.action.DELETE | 刪除數(shù)據(jù) |
| ACTION_RUN | Android.intent.action.RUN | 運(yùn)行數(shù)據(jù) |
| ACTION_SYNC | Android.intent.action.SYNC | 執(zhí)行數(shù)據(jù)同步 |
| ACTION_PICK_ACTIVITY | Android.intent.action.PICK_ACTIVITY | 用于選擇activity |
| ACTION_SEARCH | Android.intent.action.SEARCH | 執(zhí)行搜索 |
| ACTION_WEB_SEARCH | Android.intent.action. WEB_SEARCH | 直徑web搜索 |
| ACTION_ FACTORY_TEST | Android.intent.action.FACTORY_TEST | 工廠(chǎng)測(cè)試入口點(diǎn) |
這里僅僅摘錄一些,如果想了解全部的ACTION,可以直接查看Android的標(biāo)準(zhǔn)API中有關(guān)Intent的說(shuō)明部分。
3. Intent中的Data和Type屬性
采用幾個(gè)例子來(lái)說(shuō)明Data的用法:
在一個(gè)button的OnClick()方法中添加下面代碼:
String data = http://3g.renren.com;Uri uri =Uri.parse(data);Intent.setAction(Intent.ACTION_VIEW);Intent.setData(uri);startActivity(intent);
此方法中將會(huì)使得按鈕啟動(dòng)人人網(wǎng)。
當(dāng)然一下代碼是簡(jiǎn)便的寫(xiě)法:
Uri myUri = Uri.parse("http://3g.renren.com");Intent intent = new Intent(Intent.ACTION_VIEW,myUri);startActivity(intent);上面的為其更詳細(xì)的設(shè)定方法。
4. Intent的Extra屬性
Intent屬性通常用來(lái)用于在多個(gè)Activity之間進(jìn)行數(shù)據(jù)交換,Intent的Extra屬性值應(yīng)該是一個(gè)Bundle對(duì)象,他可以輸入多個(gè)key-value對(duì),這樣就可以通過(guò)Intent在不同的Activity之間進(jìn)行相應(yīng)的數(shù)據(jù)交換了。
Intent提供的方法有如下幾個(gè):
putExtra(Bundledata) getExtras()
putXXX(Stringkey XXX data) getXXX(String key)
putSerializable(Stringkey, Serializable data) 對(duì)應(yīng)的有
getSerializable(Stringkey, Serializable data)
在課件中已經(jīng)給出了添加鍵值對(duì)的相關(guān)代碼,這里就不在重復(fù)了。
總結(jié):
Android應(yīng)用總是要借助Intent來(lái)實(shí)現(xiàn)需要啟動(dòng)的某個(gè)組件,Intent就是這種"啟動(dòng)意圖"的封裝形式,這種意圖并沒(méi)有和任何程序組件耦合,通過(guò)這種方式即可以很好的提供了程序的可擴(kuò)展性和可維護(hù)性,其中<intent-filter/>的配置是程序組件最為重要的標(biāo)簽,最好借助Eclipse進(jìn)行相應(yīng)標(biāo)簽的添加,因?yàn)橐恍┛崭裰?lèi)的小錯(cuò)誤常常導(dǎo)致一些異常,希望各位童鞋在使用時(shí)引起重視。
更多關(guān)于A(yíng)ndroid相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Android開(kāi)發(fā)入門(mén)與進(jìn)階教程》、《Android編程之a(chǎn)ctivity操作技巧總結(jié)》、《Android資源操作技巧匯總》、《Android文件操作技巧匯總》、《Android操作SQLite數(shù)據(jù)庫(kù)技巧總結(jié)》、《Android操作json格式數(shù)據(jù)技巧總結(jié)》、《Android數(shù)據(jù)庫(kù)操作技巧總結(jié)》、《Android編程開(kāi)發(fā)之SD卡操作方法匯總》、《Android視圖View技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注