Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android學習指南之八:詳解Intent及其應用實例

Android學習指南之八:詳解Intent及其應用實例

編輯:關於android開發

       Android的幾個主要組件可以相互協調工作,共同組成一個完整的Android應用。這些組件之間的通信就需要借助於Intent完成。

       一、Intent的基本概念

       Intent負責對應用中一次操作的動作、動作涉及數據、附加數據進行描述,Android則根據此Intent的描述,負責找到對應的組件,將 Intent傳遞給調用的組件,並完成組件的調用。

       在一個Android應用中,Intent是對執行某個操作的一個抽象描述,Intent 負責提供組件之間相互調用的相關信息傳遞,實現調用者和被調用者之間的解耦。

       二、Intent的屬性

       Intent是對執行某個操作的一個抽象描述,其描述的內容包括,對執行動作Action的描述、對操作數據的描述、還有4種附加屬性的描述。分別介紹如下:

       Action:對執行動作的描述,是個字符串,是對所將執行的動作的描述,在Intent類中定義了一些字符串常量作為標准動作,譬如:
       public static final String ACTION_DIAL = "android.intent.action.DIAL"public static final String ACTION_SENDTO = "android.intent.action.SENDTO"; 
       我們還可以自定義Action,並定義相應的Activity來處理我們自定義的行為。

       data:是對執行動作所要操作的數據的描述,Android中采用URI來表示數據,譬如在聯系人應用中,指向聯系人1的URI可能為:content://contacts/1 (由content provider提供的數據類型是content) 。 結合Action和data可以基本表達出意圖。

       •VIEW_ACTION content://contacts/1 — 顯示標識符為”1″的聯系人的詳細信息
       •EDIT_ACTION content://contacts/1 — 編輯標識符為”1″的聯系人的詳細信息 
       •VIEW_ACTION content://contacts/ — 顯示所有聯系人的列表
       •PICK_ACTION content://contacts/ — 顯示所有聯系人的列表,並且允許用戶在列表中選擇一個聯系人,然後把這個聯系人返回給父activity。例如:電子郵件客戶端可以使用這個 Intent,要求用戶在聯系人列表中選擇一個聯系人。

       除了Action和data之外,還有4個屬性。

       catagory 類別:是被請求組件的額外描述信息,Intent類中也定義了一組字符串常量表示Intent不同的類別。完整的列表可以看API文檔中Intent類的相應部分。
       public static final String CATEGORY_LAUNCHER = "android.intent.category.LAUNCHER";public static final String CATEGORY_PREFERENCE = "android.intent.category.PREFERENCE";

       extra 附加信息:除了data之外,還可以通過extra附加信息,extra屬性使用Bundle類型進行數據傳遞,我們可以把Bundle當做HashMap來理解,附加數據可以通過 intent.putExtras() 和 intent.getExtras() 進行傳入和讀取。 就像這樣,獲取附加信息: Bundle bundle = intent.getExtras();
       添加附加信息: Bundle bundle = new Bundle(); intent.putExtras(bundle);

       component 組件:顯式指定Intent的目標組件的名稱。如果指定了component屬性,系統會直接使用它指定的組件,而非匹配查找。

       type 數據類型:顯式指定Intent的數據類型,一般Intent的數據類型都能夠根據數據本身進行判定,但是通過設置這個屬性,可以強制采用顯式指定的類型和不再進行推導。

       三、解析Intent

       Intent是一種在不同組件之間傳遞的請求信息,是應用程序發出的請求和意圖,作為一個完整的消息傳遞機制,Intent不僅需要發送端,還需要接收端。

       當指定了component屬性後,就是顯式的指定了目標組件,也就是接收端。如果沒有明確指定目標組件,那麼Android系統會使用 Intent 裡的(action,data,category)三個屬性來尋找和匹配接收端。

       四、IntentFilter

       應用程序組件可以使用IntentFilter來向系統說明自己可以響應和處理那些Intent請求。組件一般通過AndroidManifest.xml文件的<Intent-Filter>描述。

XML/HTML代碼
  1. <activity android:name=”.MainTinyPhone” android:label=”@string/app_name”><intent-filter><action android:name=”android.intent.action.MAIN” /><category android:name=”android.intent.category.LAUNCHER” /></intent-filter></activity>  

       五、簡單的撥打電話的例子

       這是一個簡單的撥打電話的程序,它可以截獲手機上的撥號按鍵發出的請求,自己輸入號碼,並把數據傳給系統的打電話程序,從而實現打電話功能。

       先上效果圖:

       按綠色的撥號按鈕的時候會呼出一個菜單讓你選擇使用哪個撥號程序。

Android學習指南之八:詳解Intent及其應用實例

       我們選擇簡單撥號程序,出現輸入框可以填寫電話號碼,並撥號。

Android學習指南之八:詳解Intent及其應用實例

       點擊撥號後,調用了系統的撥號程序。

Android學習指南之八:詳解Intent及其應用實例

       最終實現了撥號:

Android學習指南之八:詳解Intent及其應用實例

       再上代碼,MainTinyDial.java的代碼:

Java代碼
  1. package andorid.basic.lesson8;   
  2.   
  3. import android.app.Activity;   
  4. import android.content.Intent;   
  5. import android.net.Uri;   
  6. import android.os.Bundle;   
  7. import android.view.View;   
  8. import android.widget.Button;   
  9. import android.widget.EditText;   
  10.   
  11. public class MainTinyDial extends Activity {   
  12.         /** Called when the activity is first created. */  
  13.         @Override  
  14.         public void onCreate(Bundle savedInstanceState) {   
  15.                 super.onCreate(savedInstanceState);   
  16.   
  17.                 // 按照main.xml來渲染用戶界面   
  18.                 setContentView(R.layout.main);   
  19.   
  20.                 // 找到存放電話號碼的可編輯文本框   
  21.                 final EditText PhoneNumberEditText = (EditText) findViewById(R.id.PhoneNumberEditText);   
  22.   
  23.                 // 找到撥號按鈕   
  24.                 Button button = (Button) findViewById(R.id.Button01);   
  25.   
  26.                 // 為撥號按鈕設置一個點擊事件觀察者   
  27.                 button.setOnClickListener(new Button.OnClickListener() {   
  28.                         //實現監聽器接口的匿名內部類,其中監聽器本身是View類的內部接口   
  29.   
  30.                         //實現接口必須實現的onClick方法   
  31.                         @Override  
  32.                         public void onClick(View v) {   
  33.                                 // 獲得可編輯文本框中的值,也就是電話號碼   
  34.                                 String phoneNumber = PhoneNumberEditText.getText().toString();   
  35.                                 // new Intent(行為,數據),其中action_dial是撥號行為,數據是電話號碼   
  36.                                 Intent intent = new Intent(Intent.ACTION_DIAL, Uri   
  37.                                                 .parse("tel://" + phoneNumber));   
  38.                                 // 去調用那些可以處理撥號行為的Activity   
  39.                                 startActivity(intent);   
  40.                         }   
  41.                 });   
  42.   
  43.         }   
  44. }  

       Intent的內容就講到這裡了。Intent使得Android組件間的通信非常靈活方便,在Android開發中使用頻率比較高,掌握它很有必要。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved