歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android的Intent機制

在Android應用程序框架中,有一個比較強大的事件處理機制——Intent(意圖)。Intent(意圖)的作用與事件(event)很像,但與傳統的事件處理有些差異。

傳統的事件處理,講究的是處理者(handler)的觸發,當事件發生時,便callback事件的處理者,或是直接將該事件傳送(forward)給應用程序,由應用程序決定處理方式。

在「Intent」這樣的事件處理觀念裡,Android 試圖將事件解釋為「應用程序的意圖」或是「使用者的意圖」,並試著去解釋該意圖的目的,若 Android 系統本身能理解應用程序的意圖,便會自行去處理該意圖所應執行的工作。Android的做法是,在每一意圖(Intent)都帶有一個動作(action),並根據不同的動作去行動。

下面是一個通過Intent實現一個自動撥號的例子:

建立一個android工程IntentDialer,編輯IntentDialer.java:

  1. package com.android;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.net.Uri;  
  6. import android.os.Bundle;  
  7. import android.widget.Toast;  
  8.   
  9. public class IntentDialerActivity extends Activity {  
  10.     /** Called when the activity is first created. */  
  11.     @Override  
  12.     public void onCreate(Bundle savedInstanceState) {  
  13.         super.onCreate(savedInstanceState);  
  14.         setContentView(R.layout.main);  
  15.           
  16.         Intent dial = new Intent();  
  17.         dial.setAction("android.intent.action.CALL");  
  18.         dial.setData(Uri.parse("tel:13428720000"));  
  19.         startActivity(dial);  
  20.         Toast.makeText(this"calling to young 13428720000", Toast.LENGTH_LONG).show();  
  21.     }  
  22. }  
因為permission的關系,所以也要在AndroidManifest.xml裡加上「CALL_PHONE」的權限。編輯AndroidManifest.xml:
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     package="com.android"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0" >  
  6.   
  7.     <uses-sdk android:minSdkVersion="10" />  
  8.   
  9.     <application  
  10.         android:icon="@drawable/ic_launcher"  
  11.         android:label="@string/app_name" >  
  12.         <activity  
  13.             android:name=".IntentDialerActivity"  
  14.             android:label="@string/app_name" >  
  15.             <intent-filter>  
  16.                 <action android:name="android.intent.action.MAIN" />  
  17.   
  18.                 <category android:name="android.intent.category.LAUNCHER" />  
  19.             </intent-filter>  
  20.         </activity>  
  21.     </application>  
  22.     <uses-permission android:name="android.permission.CALL_PHONE" />  
  23.       
  24.   
  25. </manifest>  
這個例子相當簡單,但足以說明Intent的核心了。代碼說明:

  1. 先新建一個Intent對象:
    Intent dial = new Intent();
  2. 設定Intent的action為「android.intent.action.CALL」,這是一個內建的action:

     dial.setAction("android.intent.action.CALL");

    內建action「CALL」需要附帶一筆資料,而資料的寫法是使用URI格式:

     dial.setData(Uri.parse("tel:XXXXX"));

  3. 「CALL」是一個activity action,所以調用startActivity()將Intent送給框架:

     startActivity(dial);

這個例子的概念並不難理解:送出一個帶有內建action的Intent給框架,因為action為CALL,所以框架會去啟動撥號activity並撥打電話。

程序運行結果:

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved