本文執行個體講述了Android開發中Intent用法。分享給大家供大家參考,具體如下:
Android手機軟體開發中,Intent作為手機軟體開發時很重要的對象需要引起我們的重視,實際上,intent也是體現Android開發具有其獨特性的一個標誌性的對象。
當一個Activity要啟動另外一個Activity的時候,也許一個以前較為熟悉的模式是:調用一個new函數,直接建立具有視窗特徵類的對象,又或者直接調用一個啟動函數來啟動。這種方式簡潔、明了,但是卻違背了Android開發的理念。Android使用Intent來"封裝"程式的"調用意圖",不管程式想啟動什麼組件,啟動一個Activity也好,一個service也好,或者一個Broadcast Receiver也好,Android統一使用Intent對象來封裝這種"啟動意圖"。
除此之外,使用Intent也有好處,某些時候,應用程式只是想啟動具有某些特徵的組件或者應用程式,卻並不想和這類程式有硬性的代碼耦合;另外,應用程式有時候或許只是知道要啟動的東西的一些特徵,並不知道要啟動的程式具體指的是什麼(比如,某程式想啟動發簡訊的應用程式,而此時系統中存在多個發資訊的軟體,我們無法知道要開啟什麼軟體),此時程式要做的就應該是發送一個啟動簡訊應用程式的意圖,而不是指定要開啟什麼軟體。當然更一般的,Intent也可以指定開啟那個應用程式,而與一些程式有硬性的耦合關係。
Intent還是應用程式組件之間通訊的重要媒介,兩個Activity把需要交換的資料封裝成Bundle對象,然後使用Intent來攜帶Bundle對象,這樣就實現了兩個Activity之間的資料交換。
Intent存在以下幾個屬性:Component,Action,Category,Data,Type,Extra,Flag七個屬性,其中Component屬性用來指定需要啟動的目標組件,Extra屬性用於攜帶需要交換的資料。
下面對Intent對象做詳細的介紹:
1. Intent的Component屬性
Component是用來指定啟動目標組件的屬性,標準的啟動代碼如下:
ComponentName comp = new ComponentName(firstActivity.this,secondActivity.class);Intent intent = new Intent();Intent. setComponent(comp);startActivity(intent);
以上代碼用來標準的建立ComponentName對象,進而調用Intent對象的setComponent()函數來為Intent設定相應的componentName,最後調用startAcitvity函數啟動一個新的Activity。
實際上,當需要為Intent設定Component屬性的時候,Intent已經為我們提供了一個簡單的構造器,使用方法如下(我們經常使用的方式):
複製代碼 代碼如下:
Intent intent = new Intent(firstActivity.this,senondActivity.class);
值得一提的是,在secondActivity組件中,可以使用getIntent()方法取得調用次組件的Intent對象,進而,getXXX方法在這裡就可以各種使用了。
2. Intent 的Action與Category屬性
Action和Category屬性都是普通的字串,其中Action代表了抽象出來的"動作",Category屬性用來和Action屬性配合使用,表達出要啟動某組件的意圖。
具有<intent-filter…/>標籤的Activity均有可能會被啟動。
比如:
Public final staticString SOME_ACTION = "org.someaction.SOME_ACTION"// 這是一個字元轉,隨便設定,但是一般都具有一些抽象的語義。在這個Activity種的某個按鈕的onClick()方法中加入:Intent intent = newIntent();Intent.setAction(thisActivity.SOME_ACTION);startActivity(intent);
這樣的代碼並沒有具體指出要啟動哪個Activity,這樣就脫離了"寫入程式碼",但是具體要啟動哪個Activity呢,這將取決於Activity設定檔中的<intent-filter…/>標籤。
<intent-filter…/>是AndroidManifest.xml檔案中<activity…/>元素的子項目,需要做的,就是給你實際需要相應這個意圖的Activity添加<intent-filter…/>標籤,在<intent-filter…/>下,存在著三種標籤:1.<action…/>2.<category…/>3.<data…/>,其中指定android:name屬性之後,這個activity便具有了相應上面意圖的屬性了。
對於上面的意圖,則添加這樣的代碼(當然要在<intent-filter…/>標籤下):
複製代碼 代碼如下:
<action android:name = "org.someaction.SOME_ACTION"/>
需要一提的是:一個Intent對象最多隻能包含一個Activity屬性,程式調用setAction(Stringstr)來設定Action的屬性值;而一個Activity可以有多個Category屬性,程式可以調用addCategory(String str)來添加Category屬性。當程式建立Intent的時候,建立的Intent屬性自動啟動屬性值為Intent.CATEGORY_DEFAULT常量,其值為"android.intent.category.DEFAULT",所以,在配置某個Activity屬性的時候<categoryandroid:name = "andrid.intent.category.DEFAULT ">是可以添加到設定檔當中的。
實際上Android內部提供了大量的標準的Action和Category常量。
總結如下:
Action常量 |
對應的android:name 設定 |
簡單說明 |
ACTION_MAIN |
Android.intent.action.MAIN |
應用程式入口 |
ACTION_VIEW |
Android.intent.action.VIEW |
顯示指定資料 |
ACTION_ATTACH_DATA |
Android.intent.action.ATTACH_DATA |
指定某模組資料被附加的地方 |
ACTION_EDIT |
Android.intent.action.EDIT |
編輯指定資料 |
ACTION_PICK |
Android.intent.action.PICK |
從列表中選擇某項並返回所選資料 |
ACTION_CHOOSER |
Android.intent.action.CHOOSER |
顯示一個Activity選取器 |
ACTION_GET_CONTENT |
Android.intent.action.GET_CONTENT |
讓使用者選擇資料,並返回所選 |
ACTION_DIAL |
Android.intent.action.DIAL |
顯示撥號面板 |
ACTION_SEND |
Android.intent.action.SEND |
直接發送資料 |
ACTION_SENDTO |
Android.intent.action.SENDTO |
直接發送訊息 |
ACTION_ANSWER |
Android.intent.action.ANSWER |
應答電話 |
ACTION_INSERT |
Android.intent.action.INSERT |
插入資料 |
ACTION_DELETE |
Android.intent.action.DELETE |
刪除資料 |
ACTION_RUN |
Android.intent.action.RUN |
運行資料 |
ACTION_SYNC |
Android.intent.action.SYNC |
執行資料同步 |
ACTION_PICK_ACTIVITY |
Android.intent.action.PICK_ACTIVITY |
用於選擇activity |
ACTION_SEARCH |
Android.intent.action.SEARCH |
執行搜尋 |
ACTION_WEB_SEARCH |
Android.intent.action. WEB_SEARCH |
直徑web搜尋 |
ACTION_ FACTORY_TEST |
Android.intent.action.FACTORY_TEST |
工廠測試進入點 |
這裡僅僅摘錄一些,如果想瞭解全部的ACTION,可以直接查看Android的標準API中有關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);
此方法中將會使得按鈕啟動人人網。
當然一下代碼是簡便的寫法:
Uri myUri = Uri.parse("http://3g.renren.com");Intent intent = new Intent(Intent.ACTION_VIEW,myUri);startActivity(intent);
上面的為其更詳細的設定方法。
4. Intent的Extra屬性
Intent屬性通常用來用於在多個Activity之間進行資料交換,Intent的Extra屬性值應該是一個Bundle對象,他可以輸入多個key-value對,這樣就可以通過Intent在不同的Activity之間進行相應的資料交換了。
Intent提供的方法有如下幾個:
putExtra(Bundledata) getExtras()
putXXX(Stringkey XXX data) getXXX(String key)
putSerializable(Stringkey, Serializable data) 對應的有
getSerializable(Stringkey, Serializable data)
在課件中已經給出了添加索引值對的相關代碼,這裡就不在重複了。
總結:
Android應用總是要藉助Intent來實現需要啟動的某個組件,Intent就是這種"啟動意圖"的封裝形式,這種意圖並沒有和任何程式組件耦合,通過這種方式即可以很好的提供了程式的可擴充性和可維護性,其中<intent-filter/>的配置是程式組件最為重要的標籤,最好藉助Eclipse進行相應標籤的添加,因為一些空格之類的小錯誤常常導致一些異常,希望各位童鞋在使用時引起重視。
更多關於Android相關內容感興趣的讀者可查看本站專題:《Android開發入門與進階教程》、《Android編程之activity操作技巧總結》、《Android資源操作技巧匯總》、《Android檔案操作技巧匯總》、《Android操作SQLite資料庫技巧總結》、《Android操作json格式資料技巧總結》、《Android資料庫操作技巧總結》、《Android編程開發之SD卡操作方法匯總》、《Android視圖View技巧總結》及《Android控制項用法總結》
希望本文所述對大家Android程式設計有所協助。