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已简单介绍完毕。

 

源代码如下:

《C++编程实例100篇》是一本深入实践、极具价值的编程教程,它针对C++编程语言提供了丰富的实例,旨在帮助读者更好地理解和掌握C++的各项特性与编程技巧。这本书的经典之处在于它将理论与实践相结合,通过100个精心设计的编程实例,覆盖了C++的各个核心领域,包括基础语法、面向对象编程、模板、异常处理、STL(标准模板库)等。 我们来探讨C++的基础语法。C++是C语言的增强版,它保留了C语言的高效性和灵活性,并引入了类、对象和继承等面向对象编程概念。基础语法包括变量声明、数据类型、运算符、控制结构(如if语句、for循环、while循环)、函数的定义和调用等。在实例中,你可能会遇到如何编写简单的程序,如计算两个数的和,或者实现一个简单的猜数字游戏。 C++的面向对象编程是其一大特色。通过类和对象,你可以构建复杂的软件系统。类是对象的蓝图,它定义了对象的属性和行为。实例化一个类,就是创建一个具体的对象。继承允许你创建新的类,这些类从现有的类派生,共享其属性和方法,同时可以添加新的功能。多态性是面向对象的另一个关键特性,它使得不同类型的对象可以对同一消息作出不同的响应。这些概念在实例中会以各种形式展现,例如设计一个图形界面的类层次,或实现一个简单的模拟游戏。 接下来是模板,C++的模板功能让代码更加通用,可以处理不同类型的数据。模板分为函数模板和类模板,前者可以创建泛型函数,后者可以创建泛型类。通过模板,你可以编写出高效且灵活的代码,比如实现一个通用的排序算法。 异常处理是C++中用于处理程序运行时错误的机制。当程序出现异常情况时,可以抛出一个异常,然后在适当的点捕获并处理这个异常。这使得代码能够优雅地处理错误,而不是让程序崩溃。实例中可能会有涉及文件操作或网络通信时可能出现的异常处理示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值