`
bigboy
  • 浏览: 169262 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Android之Intent

阅读更多

1.题记

       Intent提供了一种通用的消息系统,它允许在你的应用程序与其他的应用程序间传递Intent来执行动作和产生事件。通过使用Intent可以激活Android应用的三个核心组件:活动、服务、广播接收器。

2.Intent的划分与匹配

       Intent可以划分成显示意图和隐式意图。

       显示意图:调用Intent.setComponent()或Intent.setClass()方法明确指定了组件名的Intent为显示意图,显示意图明确指定了Intent应该传递给哪个组件。

       隐式意图:没有明确指定组件名的Intent为隐式意图。Android系统会根据隐式意图中设置的动作、类别、数据找到最合适的组件来处理这个意图。隐式意图定义如下:

<intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
                <data android:mimeType="vnd.android.cursor.item/phone" />
            </intent-filter>

      关于隐式意图Android系统会根据Intent Filter(意图过滤器)来匹配隐式Intent。下面是讲解如何进行意图匹配的。

      动作匹配:

      一个意图对象只能指定一个动作名称,而一个过滤器可能列举多个动作名称。如果意图对象或过滤器没有指定任何动作,结果将如下:

  • 如果过滤器没有指定任何动作,那么将阻塞所有的意图,因此所有的意图都会测试失败。没有意图能够通过这个过滤器。
  • 另一方面,只要过滤器包含只是一个动作,一个没有指定动作的意图对象自动通过这个测试。

      类别匹配:

      对于一个能够通过类别匹配测试的意图,意图对象中的类别必须匹配过滤器中的类别。这个过滤器可以列举其他的类别,但它不能遗漏在这个意图中的任何类别。

      数据匹配:

      当一个意图对象中的URL被用类和一个过滤器中的URI比较时,比较的是URI的各个组成部分。

3.Intent数据传输

       下面通过在不同Activity之间的数据传输的例子,讲述Intent的两种不通数据传输方式。

3.1Intent putExtra 方法

        Intent的putExtra方法几乎包括了所有的基本类型,如下图:



        第一个参数 name:表示携带的数据的名称

        第二个参数 value:表示数据的值。      

3.2Bundle传递数据

         Bundle类似map对象,Bundle提供了常用类型的装填数据方法和获取方法 ,如图:



 

 

    具体实例如下源码所示:

package com.sulang.android.intent;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button nextButton =(Button) findViewById(R.id.next);
        nextButton.setOnClickListener(new View.OnClickListener(){

			@Override
			public void onClick(View v) {
				//激活OtherActivity
				Intent intent=new Intent(MainActivity.this,OtherActivity.class);
				
				Bundle bundle = new Bundle();
				bundle.putString("name", "Wilian");
				bundle.putInt("age", 22);
				
				//附带上额外的数据
				intent.putExtras(bundle);
				
				//如果需要打开的Activity向前面Activity返回数据,就必须使用此方法打开Activity
				
				startActivityForResult(intent, 1);
				
			}
        	
        });
    }

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		//用来提示显示返回的信息
		if(requestCode==1)
		{
			String helloStr=data.getStringExtra("hello");
			TextView hello =(TextView) this.findViewById(R.id.hello);
			hello.setText(helloStr);
		}
		super.onActivityResult(requestCode, resultCode, data);
	}

	
    
}

 

package com.sulang.android.intent;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

/*
 *@author 七里香的悔恨,2011-3-17
 *OtherActivity.java
 *Blog:[url]http://bigboy.iteye.com/[/url]
 */
public class OtherActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.other);
		//得到激活该组件的意图
		Intent intent=this.getIntent();
		Bundle bundle=intent.getExtras();
		
		final String name=bundle.getString("name");
		int age=bundle.getInt("age");
		
		TextView view = (TextView)this.findViewById(R.id.show);
		view.setText("名称:"+name+" 年龄:"+age);
		Button backButton = (Button)this.findViewById(R.id.back);
		backButton.setOnClickListener(new View.OnClickListener(){

			@Override
			public void onClick(View v) {
					Intent data=new Intent();
					data.putExtra("hello", "hello "+name);
					//设置返回码和数据,返回码可以任意
					OtherActivity.this.setResult(1, data);
					//关闭Activity
					OtherActivity.this.finish();
			}});
			
		

		
	}

}

 

 

至此Intent已简单介绍完毕。

 

源代码如下:

  • 大小: 106.7 KB
  • 大小: 100.1 KB
  • 大小: 91.4 KB
分享到:
评论

相关推荐

    Android之Intent(博客源码)

    通过Intent进行简单的页面传值,页面逻辑是由A页面传值跳转到B页面,B页面对接收的值进行处理,然后B页面将值回传给A页面.博客地址:http://blog.csdn.net/pfe_nova/article/details/38600751

    Xamarin.Android之Intent传递对象简单实例

    在Android应用开发中,Intent是一种强大的机制,用于在不同的组件之间进行通信,如活动(Activity)、服务(Service)以及广播接收器(BroadcastReceiver)。在Xamarin.Android中,我们可以利用C#的强大特性来处理...

    Android的Intent实验

    在Android开发中,Intent是一种非常重要的组件,它用于在应用程序的不同组件之间传递消息,实现活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)以及内容提供者(Content Provider)之间的交互...

    Android利用Intent启动和关闭Activity

    【Android Intent 启动和关闭Activity】 在Android应用程序开发中,Intent是连接各个组件(如Activity、Service等)的关键桥梁,主要用于启动和关闭Activity。Intent不仅能够启动一个新的Activity,还能在Activity...

    Android之Intent通过startActivityForResult方法启动新Activity

    在Android应用开发中,Intent是连接应用程序组件的重要桥梁,它用于在不同的Activity、Service之间传递信息。`startActivityForResult()`是Intent的一种特殊用法,它允许一个Activity启动另一个Activity,并期望在新...

    android之intent&activity;生命周期

    在Android开发中,Activity和Intent是两个非常核心的概念,它们都与应用组件的生命周期紧密相关。本文将深入浅出地介绍如何定义多个Activity、Intent的数据结构及作用、以及Android中的backstack和Activity的生命...

    Android之Intent附加数据的两种实现方法

    本文实例讲述了Android之Intent附加数据的两种实现方法。分享给大家供大家参考。具体如下: 第一种写法,用于批量添加数据到Intent: Intent intent = new Intent(); Bundle bundle = new Bundle(); //该类用作携带...

    android.intent.action.TIME_TICK

    3. 注册IntentFilter:为IntentFilter添加对应的ACTION,如"android.intent.action.TIME_TICK"、"android.intent.action.SCREEN_ON"和"android.intent.action.BATTERY_CHANGED"。 4. 不再需要时,记得在合适的位置...

    android用于打开各种文件的intent.pdf

    Android 中使用 Intent 打开各种文件类型 Android 操作系统提供了 Intent 机制,允许应用程序之间进行交互和通信。Intent 是一个异步的消息机制,用于在应用程序之间请求或提供服务。通过使用 Intent,可以实现打开...

    android Intent例子源码

    android Intent例子源码android Intent例子源码android Intent例子源码android Intent例子源码android Intent例子源码android Intent例子源码

    android 利用intent调用activity 简明精炼的例子

    在Android应用开发中,Intent是连接应用程序组件的重要桥梁,它用于启动新的Activity或者服务,以及在组件间传递数据。Intent可以分为显式Intent和隐式Intent。本篇将重点讲解如何利用Intent在Android中调用Activity...

    Android通过Intent传递数据

    如果数据量较大,可以使用`Bundle`对象,将之作为Intent的一个额外参数。`Bundle`提供了丰富的put方法,支持各种数据类型的存储。例如: ```java Bundle bundle = new Bundle(); bundle.putInt("key", 123); ...

    Android-Intent-数据存取-ContentProvider.doc

    "Android Intent 和 ContentProvider" Android Intent 是 Android 组件之间的信使,负责在 Android 三大核心组件(Activity、Service、Broadcast Receiver)之间传递信息。Intent 是一个将要执行的动作的抽象描述...

    Android中intent的使用

    在Android应用开发中,Intent是连接应用程序组件之间通信的关键机制,它用于启动其他...理解和熟练使用Intent,是每个Android开发者必备的技能之一。通过合理的Intent设计,我们可以构建出更加灵活、可扩展的应用程序。

    android中intent使用示例

    在Android开发中,Intent是一种非常重要的组件间通信机制。它被用来启动活动(Activity)、服务(Service)或者传递数据。本示例将深入探讨Intent的基本用法和常见应用场景。 首先,Intent分为显式Intent和隐式...

    Android通过Intent跳转地图应用(百度地图、高德地图)

    在Android开发中,Intent是一种强大的工具,用于在不同的组件之间传递数据和启动操作。当我们需要在应用程序中调用外部应用,如地图应用,如百度地图或高德地图,Intent是实现这一功能的关键。本篇文章将深入讲解...

    Android利用intent实现分享功能

    ### Android利用Intent实现分享功能详解 #### 概述 随着移动互联网的发展,用户越来越依赖于在不同的应用程序之间共享内容。为了满足这一需求,Android平台提供了多种解决方案,包括使用第三方库如友盟、ShareSDK...

    Android开发Intent的传参页面跳转

    在Android应用开发中,Intent是连接应用程序组件的重要桥梁,它用于启动新的Activity或者Service,同时还可以传递数据。本文将深入探讨如何使用Intent进行页面跳转并传递参数。 首先,我们来了解一下Intent的基本...

Global site tag (gtag.js) - Google Analytics