歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android的Intent機制

Android的Intent機制

日期:2017/3/1 10:21:09   编辑:Linux編程

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

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

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

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

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

  1. package com.android;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.net.Uri;
  5. import android.os.Bundle;
  6. import android.widget.Toast;
  7. public class IntentDialerActivity extends Activity {
  8. /** Called when the activity is first created. */
  9. @Override
  10. public void onCreate(Bundle savedInstanceState) {
  11. super.onCreate(savedInstanceState);
  12. setContentView(R.layout.main);
  13. Intent dial = new Intent();
  14. dial.setAction("android.intent.action.CALL");
  15. dial.setData(Uri.parse("tel:13428720000"));
  16. startActivity(dial);
  17. Toast.makeText(this, "calling to young 13428720000", Toast.LENGTH_LONG).show();
  18. }
  19. }
因為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. <uses-sdk android:minSdkVersion="10" />
  7. <application
  8. android:icon="@drawable/ic_launcher"
  9. android:label="@string/app_name" >
  10. <activity
  11. android:name=".IntentDialerActivity"
  12. android:label="@string/app_name" >
  13. <intent-filter>
  14. <action android:name="android.intent.action.MAIN" />
  15. <category android:name="android.intent.category.LAUNCHER" />
  16. </intent-filter>
  17. </activity>
  18. </application>
  19. <uses-permission android:name="android.permission.CALL_PHONE" />
  20. </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