Android的Intent机制实例讲解

移动开发 Android
Intent是Android中简单的消息传递框架。使用Intent,你可以在整个系统内广播消息或者给特定的Activity或者服务来执行你的行为意图。系统会决定那个(些)目标来执行适当的行为。本文用实例介绍了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的核心了。代码说明:

先新建一个Intent对象:

  1. Intent dial = new Intent(); 

设定Intent的action为「android.intent.action.CALL」,这是一个內建的action:

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

內建action「CALL」需要附带一笔资料,而资料的写法是使用URI格式:

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

「CALL」是一个activity action,所以调用startActivity()将Intent送给框架:

  1. startActivity(dial);  

这个例子的概念并不难理解:送出一个带有內建action的Intent給框架,因为action为CALL,所以框架会去启动拨号activity并拨打电话。

程序运行结果:

责任编辑:徐川 来源: Linux社区
相关推荐

2014-07-15 10:16:02

AndroidIntent

2013-05-27 14:06:14

Android开发移动开发Intent机制

2013-03-28 09:07:37

Android开发Intent机制

2009-04-03 08:21:37

AndroidGoogle移动OS

2013-01-10 15:36:44

Android开发组件Intent

2010-01-25 16:52:22

Android Int

2009-06-17 13:57:54

java实例Reflection

2011-05-30 14:00:35

Android Activity Intent

2011-04-01 09:04:09

RIP

2011-05-23 13:24:01

2009-11-23 17:56:44

PHP缓存机制

2011-04-07 13:09:03

明文验证

2009-11-23 17:31:49

PHP时间戳

2009-11-23 20:16:17

PHP接口特性

2011-04-02 16:37:26

PAT

2010-09-14 17:20:57

2010-06-03 18:22:38

Hadoop

2013-05-21 09:56:15

2017-02-21 12:20:20

Android事件分发机制实例解析

2010-08-18 10:13:55

IntentAndroid
点赞
收藏

51CTO技术栈公众号