首页 文章

什么是Android中的意图?

提问于
浏览
325
  • 什么是Android中的Intent

  • 有人可以举例说明吗?

  • Intent有哪些类型,以及我们使用它们的原因?

  • 为什么Intents在Android中如此重要?

16 回答

  • 2

    Intent是执行动作的"intention";换一种说法,

    可用于从其他应用程序组件请求操作的消息传递对象

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

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

    如果你想发动做某事的意图,比如弹出拨号器,你就会说你会的 .

  • 465

    什么是意图?

    Intent 基本上是在 components 之间传递的消息(例如 ActivitiesServices, 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的其他技术细节 .

    intent是要执行的操作的抽象描述 . 它可以与startActivity一起使用来启动Activity,broadcastIntent可以将它发送到任何感兴趣的BroadcastReceiver组件,startService(Intent)或bindService(Intent,ServiceConnection,int)可以与后台服务进行通信 . Intent提供了一种工具,用于在不同应用程序中的代码之间执行延迟运行时绑定 . 它最重要的用途是在活动的发起中,它可以被认为是活动之间的 Binders . 它基本上是一个被动数据结构,包含要执行的动作的抽象描述 . 意图中的主要信息包括:操作要执行的一般操作,例如ACTION_VIEW,ACTION_EDIT,ACTION_MAIN等 . 数据要操作的数据,例如联系人数据库中的人员记录,表示为Uri .

    了解更多

  • 1

    意图是 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过滤器(以编程方式) . 请记住,这仅适用于广播接收器 .

  • 2

    您可以将意图视为“意图做某事” . 它是一种消息,允许您在运行时将单独的对象(如活动)绑定在一起 .

    如果一个活动想要开始第二个活动,它会通过向Android发送意图来实现 . Android将启动第二个活动并将其传递给意图 .

    enter image description here

    Head First Android Development

  • 0

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

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

    单词取自这里:Using Intent Demo我建议你通过这个例子,因为他们也提供了一个代码文件 . 所以你可以使用它并轻松理解相同的内容 .

  • 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

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

    还有更多的文章可供选择 .

  • 8

    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 .

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

    Implicit Android Intent

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

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

    有关更多信息,请访问以下内容

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

  • 0

    what is Intent ?

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

    android中有两种类型的意图:

    隐含意图显式意图

    Implicit intent用于调用系统组件

    示例

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

    Explicit intent用于调用活动类 .

    示例

    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

  • 12

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

    如果您认为有用,请看看..

    谢谢

  • 0

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

    示例:当用户执行此类操作时,将一个活动的数据传递给另一个活动

    目前的活动 .

  • 2

    Intent 是执行操作的意图 .

    详细信息,您可以参考

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

    另外,在我的博客中

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

    看看它是否对您有所帮助 .

    谢谢 .

  • 15

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

    当一个Activity想要启动另一个活动时,它会创建一个名为Intent的Object,指定它想要启动哪个Activity .

  • 148

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

  • 8

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

    The 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 之上 .

  • 44

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

    它们基本上有两种类型

    • 隐含意图 .

    • 显式意图 .

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

相关问题