什么是Android中的意图?

时间:2011-07-05 04:48:17

标签: android android-intent

  • Android中的Intent是什么?
  • 有人可以举例说明吗?
  • 有什么类型的意图,以及我们使用它们的原因?
  • 为什么Intent在Android中如此重要?

16 个答案:

答案 0 :(得分:470)

Intent是执行某项行动的“意图”;换句话说,

  

您可以用来向其他app component

请求操作的消息传递对象

Intent基本上是一条消息,表示你做了或想要发生什么。根据意图,应用程序或操作系统可能正在监听它并将作出相应的反应。把它想象成一群朋友的爆炸性电子邮件,其中你告诉你的朋友约翰做某事,或者告诉你可以做X("intent filters")的朋友做X.其他人会忽略这封电子邮件但约翰(或能做X的朋友)会对此做出反应。

要收听广播意图(如电话铃声或收到短信),您实施broadcast receiver,将传递意图。要声明您可以处理另一个应用程序意图,例如“拍照”,您声明intent filter in your app's manifest file

如果你想发动做某事的意图,比如弹出拨号器,你就fire off an intent说你会。

答案 1 :(得分:153)

什么是意图?

Intent 基本上是在 components 之间传递的消息(例如活动服务,广播接收器内容提供商)。因此,它几乎等同于传递给API调用的参数。 API调用和通过意图调用组件之间的根本区别是:

  • API调用是基于意图的调用是同步的 异步。
  • API调用是基于intent的调用时的编译时绑定 运行时绑定。

当然,通过使用所谓的显式意图,可以使Intent完全像API调用一样工作,这将在后面解释。但通常情况下,implicit intents是要走的路,这就是这里所解释的。

想要调用另一个组件的组件必须仅表达其意图才能完成工作。 Android平台调用任何其他存在并声称可以通过intent-filters完成此类工作的组件来完成工作。这意味着,两个组件都不知道彼此的存在,但仍然可以一起工作,为最终用户提供所需的结果。

组件之间的这种不可见的连接是通过意图,意图过滤器和Android平台的组合来实现的。

这带来了巨大的可能性,如:

  • 在运行时混合或匹配或更确切地插入和播放组件。
  • 使用自定义开发替换内置的Android应用程序 的应用程序。
  • 应用程序内部和跨应用程序的组件级别重用。
  • 如果我可以说,服务方向到最细微的级别。

以下是有关Intents from the Android documentation的其他技术详情。

  

intent是要执行的操作的抽象描述。它可以与 startActivity 一起使用,以启动活动,broadcastIntent 将其发送到任何感兴趣的 BroadcastReceiver 组件,以及 startService(Intent) bindService(Intent,ServiceConnection,int)与后台服务进行通信。

     

Intent提供了一种工具,用于在不同应用程序中的代码之间执行延迟运行时绑定。它最重要的用途是发起活动,它可以被认为是活动之间的粘合剂。它基本上是一个被动数据结构,包含要执行的动作的抽象描述。意图中的主要信息是:

     
      
  • 作用   要执行的一般操作,例如ACTION_VIEW,   ACTION_EDIT,ACTION_MAIN等
  •   
  • 数据   要操作的数据,例如联系人中的人员记录   数据库,表示为Uri。
  •   

了解详情

答案 2 :(得分:45)

意图是告诉Android你想做什么的一种方式。 换句话说,你描述了你的意图。意图可用于向Android系统发出已发生特定事件的信号。 Android中的其他组件可以通过intent过滤器注册到此事件。

以下是 2种类型的意图

1.明确的意图

用于调用特定组件。当您知道要启动哪个组件时,并且您不希望让用户可以自由控制要使用的组件。例如,您有一个包含2个活动的应用程序。活动A和活动B.您想要从活动A启动活动B.在这种情况下,您定义一个显式的意图目标activityB,然后使用它直接调用它。

2.Implicit Intents

当您知道自己想要做什么时使用,但是您不知道应该启动哪个组件。或者,如果您希望为用户提供在要使用的组件列表之间进行选择的选项。如果将这些Intent发送到Android系统,它将搜索为特定操作和数据类型注册的所有组件。如果只找到一个组件,Android将直接启动该组件。例如,您有一个使用相机拍照的应用程序。您的应用程序的一个功能是,您可以让用户发送他拍摄的照片。您不知道用户可以发送照片的应用程序类型,并且您还希望为用户提供选项,以便在有多个外部应用程序时选择使用该应用程序。在这种情况下,您不会使用明确的意图。相反,你应该使用一个隐含的意图,其动作设置为ACTION_SEND,其数据额外设置为照片的URI。

无论它包含什么,明确的意图总是传递给它的目标;不咨询过滤器。但只有当组件可以通过组件的一个过滤器

时,才会将隐式意图传递给组件

意图过滤器

如果将Intents发送到Android系统,它将确定此Intent的合适应用程序。如果已为此类Intent注册了多个组件,则Android会为用户提供打开其中一个组件的选择。

此确定基于IntentFilters。 IntentFilters指定活动,服务或广播接收器可以响应的Intent类型。 Intent Filter声明组件的功能。它指定了响应或服务可以执行的操作以及Receiver可以处理的广播类型。它允许相应的组件接收声明类型的Intents。 IntentFilters通常通过AndroidManifest.xml文件定义。对于BroadcastReceiver,也可以在编码中定义它们。 IntentFilters由其类别,操作和数据过滤器定义。它还可以包含其他元数据。

如果组件未定义Intent过滤器,则只能通过显式Intents调用它。

以下是 2种定义过滤器的方法

1.清单文件

如果在清单中定义了intent过滤器,则不必运行应用程序来对其过滤器中定义的意图作出反应。 Android会在您的应用程序安装后注册过滤器。

2.BroadCast Receiver

如果您希望广播接收器仅在应用程序运行时接收意图。然后,您应该在运行时定义您的intent过滤器(以编程方式)。请记住,这仅适用于广播接收器。

答案 3 :(得分:12)

在编写单个活动之后,需要转换到另一个活动以执行另一个任务,无论是否有第一个活动的信息。

Android平台允许通过Intent Interface进行转换。

从这里取词:Using Intent Demo我建议您通过这个例子,因为他们也提供了一个代码文件。所以你可以使用它并轻松理解它。

答案 4 :(得分:9)

根据他们的文件:

  

Intent是一个在不同组件之间提供运行时绑定的对象(例如两个活动)。意图表示应用程序“有意做某事”。您可以将意图用于各种任务,但通常它们用于启动另一项活动。

以下是与示例的链接: http://developer.android.com/training/basics/firstapp/starting-activity.html#BuildIntent

正如文档描述的那样,为了开始一项活动(你还需要了解什么是活动),请使用下面的意图

/** 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);
}

答案 5 :(得分:9)

Android意图

Android Intent可让您从一个Android活动导航到另一个。通过示例,本教程还讨论了各种类型的Android意图。

Android Intent可以定义为一个简单的消息对象,用于从1个活动到另一个活动进行通信。

意图定义应用程序的意图。它们还用于在活动之间传输数据。

Android Intent可用于执行以下3项任务:

  1. 从当前活动
  2. 打开另一个活动或服务
  3. 在活动和服务之间传递数据
  4. 将责任委托给另一个申请。例如,你可以 使用Intent打开浏览器应用程序以显示URL。
  5. 意图大致可分为两类。此类别没有关键字,只是对Android意图如何使用的广泛分类。

    明确的Android意图

    显式Android Intent是您明确定义Android系统需要调用的组件的Intent。

     Intent MoveToNext = new Intent (getApplicationContext(), SecondActivity.class);
    

    隐含的Android意图

    隐式Android意图是一种意图,您可以定义要执行的操作,而不是定义确切的组件。处理此操作的决定权留给操作系统。操作系统决定哪个组件最适合运行隐式意图。 让我们看一个例子:

        Intent sendIntent = new Intent();
        sendIntent.setAction(Intent.ACTION_SEND);
    

    有关详细信息,请访问以下

      

    http://developer.android.com/reference/android/content/Intent.html

答案 6 :(得分:8)

intent是要执行的操作的抽象描述。它可以与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

还有更多文章可供选择。

答案 7 :(得分:5)

什么是意图?

这是传递给组件的一种消息或信息。它用于启动活动,显示网页,发送短信,发送电子邮件等。

android中有两种类型的意图:

  

隐含意图
  明确的意图

隐式意图用于调用系统组件

  

实施例

Intent i = newIntent(android.content.Intent.ACTION_VIEW,Uri.parse(“http://www.amazon.com”));

startActivity(i);

显式意图用于调用活动类。

  

实施例

Intent intent = newIntent(this,SecondActivity.class);

startActivity(intent);

你可以阅读更多

http://www.vogella.com/tutorials/AndroidIntent/article.html#intents_overview http://developer.android.com/reference/android/content/Intent.html

答案 8 :(得分:2)

为了理解意图,我建议你浏览网站: 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/

如果您认为有用,请查看。

谢谢

答案 9 :(得分:2)

Intent是一个类,它绑定信息以执行某些操作。

示例:当用户在

中执行此类操作时,将一个活动的数据传递给另一个活动

目前的活动。

答案 10 :(得分:2)

意图是执行操作的意图。

详细信息,请参阅

http://developer.android.com/reference/android/content/Intent.html

另外,在我的博客中

http://emergingandroidtech.blogspot.in/2014/11/what-is-intent-in-android.html

看一下它是否对你有帮助。

谢谢。

答案 11 :(得分:1)

从广义上讲,我们可以将意图定义为

  

当一个Activity想要启动另一个活动时,它会创建一个Object   调用Intent,指定它想要启动哪个Activity。

答案 12 :(得分:0)

  

Android应用程序可以包含零个或多个活动。当您的应用程序有多个活动时,您通常需要从一个活动导航到另一个活动。在Android中,您可以通过所谓的意图在活动之间导航。您可以使用putExtra()将一些数据传递给您想要通过意图启动的活动。

答案 13 :(得分:0)

来自论文Deep Dive into Android IPC/Binder Framework atAndroid Builders Summit 2013 link

意图在一些小而有效的行中被理解

  1. Android通过意图支持一种简单形式的IPC(进程间通信)
  2. Intent messaging是Android组件(活动,服务,内容提供商,广播接收者)之间异步通信的框架。
  3. 这些组件可以在相同或不同的应用程序(即进程)中运行
  4. 启用点对点以及发布订阅消息传递域
  5. 意图本身代表一条消息,其中包含要执行的操作的描述以及要传递给收件人的数据。
  6. this主题开始,Android架构师Dianne Hackborn的一个简单答案将其称为data container,实际上是它。

    从Android架构的角度来看

    Intent是一个用于进程间通信的数据容器。它建立在Android架构的Binder之上。

答案 14 :(得分:0)

意图用于从一个活动启动另一个活动。它基本上用于多种目的,例如从一个活动向另一个活动发送数据,以及用于触发目的。

它们基本上是两种类型

  1. 隐含意图。

  2. 显式意图。

  3. 作为一个初学者,我知道这一点,我认为这将给出一些关于android意图的基本概念

答案 15 :(得分:-1)

意图基本上是一种将数据从一个活动传递到另一个活动的方式