/** Called when the user clicks the Send button */
public void sendMessage(View view) {
Intent intent = new Intent(this, DisplayMessageActivity.class);
EditText editText = (EditText) findViewById(R.id.edit_message);
String message = editText.getText().toString();
intent.putExtra(EXTRA_MESSAGE, message);
startActivity(intent);
}
16 回答
Intent是执行动作的"intention";换一种说法,
一个意图基本上是一个消息,说你做了或想要发生的事情 . 根据意图,应用程序或操作系统可能正在监听它并将作出相应的反应 . 可以把它想象成给一群朋友发送电子邮件,其中你告诉你的朋友约翰做某事,或者告诉你能做X的朋友("intent filters")做X.其他人会忽略这封电子邮件,但约翰(或者可以做X)的朋友会对此做出反应 .
要收听广播意图(如电话响铃或收到短信),您实施broadcast receiver,将传递意图 . 要声明您可以处理另一个应用程序意图,如"take picture",您声明intent filter in your app's manifest file .
如果你想发动做某事的意图,比如弹出拨号器,你就会说你会的 .
什么是意图?
Intent 基本上是在 components 之间传递的消息(例如 Activities , Services, Broadcast Receivers, 和 Content Providers ) . 因此,它几乎等同于传递给API调用的参数 . API调用和通过意图调用组件之间的根本区别是:
API调用是同步的,而基于意图的调用是异步的 .
API调用是编译时绑定,而基于intent的调用是运行时绑定 .
当然,通过使用后面将要解释的 explicit intents, ,可以使Intent完全像API调用一样工作 . 但通常情况下,implicit intents是要走的路,这就是这里所解释的 .
想要调用另一个组件的一个组件必须只表达它的 intent 来完成一项工作 . Android平台调用任何其他存在并声称可以通过intent-filters执行此类工作的组件来完成此任务 . 这意味着,两个组件都不知道彼此的存在,但仍然可以一起工作,为最终用户提供所需的结果 .
组件之间的这种不可见的连接是通过意图,意图过滤器和Android平台的组合实现的 .
这导致了巨大的可能性,如:
在运行时混合或匹配或更确切地插入和播放组件 .
用自定义开发的应用程序替换内置的Android应用程序 .
应用程序内部和跨应用程序的组件级别重用 .
如果我可以说,服务方向到最细微的级别 .
以下是有关Intents from the Android documentation的其他技术细节 .
了解更多
Lars Vogel's tutorial
ProgrammerGuru article
Common intents
意图是 telling Android what you want to do 的一种方式 . 换句话说,你描述了你的意图 . 意图可用于向Android系统发出已发生特定事件的信号 . Android中的其他组件可以通过intent过滤器注册到此事件 .
以下是 2 types of intents
1.明确的意图
用于调用特定组件 . 当您知道要启动哪个组件时,您不希望让用户可以自由控制要使用的组件 . 例如,您有一个包含2个活动的应用程序 . 活动A和活动B.您想要从活动A启动活动B.在这种情况下,您定义一个显式的意图定位活动B,然后使用它直接调用它 .
2.隐含意图
当您知道自己想要做什么时使用,但是您不知道应该启动哪个组件 . 或者,如果您希望为用户提供在要使用的组件列表之间进行选择的选项 . 如果将这些Intent发送到Android系统,它将搜索为特定操作和数据类型注册的所有组件 . 如果只找到一个组件,Android将直接启动该组件 . 例如,您有一个使用相机拍照的应用程序 . 其中一个您的应用程序的功能是,您可以让用户发送他拍摄的照片 . 您不知道用户可以发送照片的应用程序类型,并且您还希望为用户提供选择如果他有多个外部应用程序的选项 . 在这种情况下,您不会使用明确的意图 . 相反,您应该使用隐式意图,其操作设置为ACTION_SEND,其数据额外设置为照片的URI .
无论它包含什么,始终都会向其目标传递明确的意图;不咨询过滤器 . 但只有当组件可以通过组件的某个过滤器时,才会将隐式意图传递给组件
意图过滤器
如果将Intents发送到Android系统,它将确定此Intent的合适应用程序 . 如果已为此类Intents注册了多个组件,则Android会为用户提供打开其中一个组件的选择 .
此确定基于IntentFilters . IntentFilters指定活动,服务或广播接收器可以响应的Intent类型 . Intent Filter声明组件的功能 . 它指定了响应或服务可以执行的操作以及Receiver可以处理的广播类型 . 它允许相应的组件接收声明类型的Intents . IntentFilters通常通过AndroidManifest.xml文件定义 . 对于BroadcastReceiver,也可以在编码中定义它们 . IntentFilters由其类别,操作和数据过滤器定义 . 它还可以包含其他元数据 .
如果组件未定义Intent过滤器,则只能通过显式Intents调用它 .
以下是 2 ways to define a filter
1.清单文件
如果在清单中定义了intent过滤器,则不必运行应用程序来响应其过滤器中定义的意图 . Android会在安装应用程序时注册过滤器 .
2. BroadCast接收器
如果您希望广播接收器仅在您的应用程序运行时接收该意图 . 然后,您应该在运行时定义您的intent过滤器(以编程方式) . 请记住,这仅适用于广播接收器 .
您可以将意图视为“意图做某事” . 它是一种消息,允许您在运行时将单独的对象(如活动)绑定在一起 .
如果一个活动想要开始第二个活动,它会通过向Android发送意图来实现 . Android将启动第二个活动并将其传递给意图 .
Head First Android Development
在编写单个活动之后,需要转换到另一个活动以执行另一个任务,无论是否有来自第一个活动的信息 .
Android平台允许通过Intent Interface进行转换 .
单词取自这里:Using Intent Demo我建议你通过这个例子,因为他们也提供了一个代码文件 . 所以你可以使用它并轻松理解相同的内容 .
根据他们的文件:
以下是与示例的链接:http://developer.android.com/training/basics/firstapp/starting-activity.html#BuildIntent
正如文档所描述的,为了开始一项活动(你还需要了解什么是活动),请使用下面的意图
意图是要执行的操作的抽象描述 . 它可以与startActivity一起使用来启动Activity,broadcastIntent可以将它发送到任何感兴趣的BroadcastReceiver组件,startService(Intent)或bindService(Intent,ServiceConnection,int)可以与后台服务进行通信 .
有关更多详细信息,请参阅以
1) . http://developer.android.com/reference/android/content/Intent.html
2)http://developer.android.com/guide/topics/intents/intents-filters.html
3) . http://www.vogella.de/articles/AndroidIntent/article.html
还有更多的文章可供选择 .
Android Intent
Android Intent允许您从一个Android活动导航到另一个 . 通过示例,本教程还讨论了各种类型的Android意图 .
Android Intent可以定义为一个简单的消息对象,用于从1个活动到另一个活动进行通信 .
意图定义了应用程序的意图 . 它们还用于在活动之间传输数据 .
Android Intent可用于执行以下3个任务:
Open another Activity or Service from the current Activity
Pass data between Activities and Services
Delegate responsibility to another application. For example, you can use Intents to open the browser application to display a URL.
意图可大致分为2类 . 此类别没有关键字,只是对Android意图的使用方式进行了广泛的分类 .
Explicit Android Intent
显式Android Intent是您明确定义需要由Android系统调用的组件的Intent .
Implicit Android Intent
隐式Android Intents的意图是,您可以定义要执行的操作,而不是定义确切的组件 . 处理此操作的决定由操作决定系统 . 操作系统决定哪个组件最适合隐式意图运行 . 让我们看一个例子:
有关更多信息,请访问以下内容
what is Intent ?
它是传递给组件的一种消息或信息 . 它用于启动活动,显示网页,发送短信,发送电子邮件等 .
android中有两种类型的意图:
Implicit intent用于调用系统组件
Explicit intent用于调用活动类 .
Intent intent = newIntent(this,SecondActivity.class);
你可以阅读更多
http://www.vogella.com/tutorials/AndroidIntent/article.html#intents_overview http://developer.android.com/reference/android/content/Intent.html
为了理解意图,我建议你浏览网站:http://developer.android.com/guide/topics/intents/intents-filters.html
另外,我在个人博客中讨论过有关示例的意图:http://androiddesk.wordpress.com/2011/12/24/explicit-intent/
http://androiddesk.wordpress.com/2012/01/13/implicit-intent/
如果您认为有用,请看看..
谢谢
Intent是一个类,它绑定信息以执行某些操作 .
示例:当用户执行此类操作时,将一个活动的数据传递给另一个活动
目前的活动 .
Intent 是执行操作的意图 .
详细信息,您可以参考
http://developer.android.com/reference/android/content/Intent.html
另外,在我的博客中
http://emergingandroidtech.blogspot.in/2014/11/what-is-intent-in-android.html
看看它是否对您有所帮助 .
谢谢 .
从广义上讲,我们可以将 Intent 定义为
来自论文
Deep Dive into Android IPC/Binder Framework atAndroid Builders Summit 2013
linkThe intent is understood in some small but effective lines
Android通过意图支持简单形式的IPC(进程间通信)
Intent messaging是Android组件(活动,服务,内容提供商,广播接收器)之间异步通信的框架
这些组件可以在相同或不同的应用程序(即进程)中运行
启用点对点以及发布订阅消息传递域
意图本身表示一条消息,其中包含要执行的操作的描述以及要传递给接收方的数据 .
从this线程开始,android架构师Dianne Hackborn的一个简单答案就是它实际上是
data container
.From android architecture point of view :
Intent是一个用于进程间通信的数据容器 . 它 Build 在Android架构的
Binder
之上 .意图用于从一个活动启动另一个活动 . 它基本上用于多种目的,例如从一个活动向另一个活动发送数据,以及用于触发目的 .
它们基本上有两种类型
隐含意图 .
显式意图 .
作为初学者,我知道这一点,我认为这将给出一些关于android意图的基本概念