嵌入式android普及之:AndroidIntent机制实例详解1Android中与Intent相关的还有Action/Category及IntentFilter等,另外还有用于广播的Intent,这些元素掺杂在一起,
导致初学者不太容易迅速掌握Intent的用法。在讲解这些名词之前,我们先来从下面的例子中感受一下Intent的一些基本用法,看看它能做些什么,之后再来思考这种机制背后的意义。理解Intent的关键之一是理解清楚Intent的两种基本用法:一种是显式的Intent,即在构造Intent对象时就指定接收者,这种方式与普通的函数调用类似,只是复用的粒度有所差别;另一种是隐式的Intent,即Intent的发送者在构造Intent对象时,并不知道也不关心接收者是谁,这种方式与函数调用差别比较大,有利于降低发送者和接收者之间的耦合。另外Intent除了发送外,还可用于广播,这些都将在后文进行详细讲述。下面的一小节我们来看看显式Intent的用法。显式的Intent(ExplicitIntent)2同一个应用
程序中的Activity切换我们在前面的章节已经讨论过Activity的概念,通常一个应用程序中需要多个UI屏幕,也就需要多个Activity类,并且在这些Activity之间进行切换,这种切换就是通过Intent机制来实现的。在同一个应用程序中切换Activity时,我们通常都知道要启动的Activity具体是哪一个,因此
常用显式的Intent来实现。下面的例子用来实现一个非常简单的应用程序SimpleIntentTest,它包括两个UI屏幕也就是两个Activity——SimpleIntentTest类和TestActivity类,SimpleIntentTest类有一个按钮用来启动TestActivity,程序运行的截图如图5.3所示:图5.3SimpleIntentTest程序运行截图程序的代码非常简单,SimpleIntentTest类的
源代码如下:packagecom.tope.samples.intent.simple;
importandroid.app.Activity;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.widget.Button;
publicclassSimpleIntentTestextendsActivityimplementsView.OnClickListener{
/**Calledwhentheactivityisfirstcreated.*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ButtonstartBtn=(Button)findViewById(R.id.start_activity);
startBtn.setOnClickListener(this);
}
publicvoidonClick(Viewv){
switch(v.getId()){
caseR.id.start_activity:
Intentintent=newIntent(this,TestActivity.class);
startActivity(intent);
break;
default:
break;
}
}
}上面的代码中,主要是为“Startactivity”按钮添加了OnClickListener,使得按钮被点击时执行onClick()方法,onClick()方法中则利用了Intent机制,来启动TestActivity,关键的代码是下面这两行:Intentintent=newIntent(this,TestActivity.class);
startActivity(intent);这里定义Intent对象时所用到的是Intent的构造函数之一:
Intent(ContextpackageContext,Class>cls)两个参数分别指定Context和Class,由于将Class设置为TestActivity.class,这样便显式的指定了TestActivity类作为该Intent的接收者,通过后面的startActivity()方法便可启动TestActivity。TestActivity的代码更为简单(定义TestActivity类需要新建TestActivity.java文件,如果你是一个初学者,你需要学会如何在Eclipse或其他开发环境下添加一个新的类,本书不作详述,请参考其他
文档),如下所示:packagecom.tope.samples.intent.simple;
importandroid.app.Activity;
importandroid.os.Bundle;
publicclassTestActivityextendsActivity{
/**Calledwhentheactivityisfirstcreated.