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