什么是Android中的意图?

Nik*_*tel 336 android android-intent

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

Chi*_*rag 478

意图是一个"意图"要执行的动作; 换一种说法,

您可以使用消息传递对象从另一个应用程序组件请求操作

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

要收听广播意图(如电话铃声或收到短信),您需要实现广播接收器,该接收器将传递意图.要声明您可以处理另一个应用程序意图,如"拍照",您在应用程序的清单文件中声明了一个意图过滤器.

如果你想发动做某事的意图,比如弹出拨号器,你会发出一个意图,表示你愿意.


mr.*_*fox 161

什么是意图?

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

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

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

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

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

这导致了巨大的可能性,如:

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

以下是Android文档中有关Intents的其他技术详细信息.

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

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

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

学到更多

  • 我很欣赏在这个解释中使用计算机科学概念.这使得讨论更加具体,对计算机科学具有扎实学位的读者尤其有用. (3认同)

Var*_*tia 48

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

以下是两种意图

1.明确的意图

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

2.隐含的意图

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

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

意图过滤器

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

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

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

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

1.清单文件

如果在清单中定义了intent过滤器,则不必运行应用程序来响应其过滤器中定义的意图.Android会在安装应用程序时注册过滤器.

2.BroadCast接收器

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


Par*_*ani 12

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

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

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


kta*_*kta 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);
}
Run Code Online (Sandbox Code Playgroud)


Int*_*iya 9

Android意图

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

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

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

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

  1. 从当前活动中打开另一个活动或服务
  2. 在活动和服务之间传递数据
  3. 将责任委托给另一个申请.例如,您可以使用Intents打开浏览器应用程序以显示URL.

意图可大致分为2类.此类别没有关键字,只是对Android意图的使用方式的广泛分类.

明确的Android意图

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

 Intent MoveToNext = new Intent (getApplicationContext(), SecondActivity.class);
Run Code Online (Sandbox Code Playgroud)

隐含的Android意图

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

    Intent sendIntent = new Intent();
    sendIntent.setAction(Intent.ACTION_SEND);
Run Code Online (Sandbox Code Playgroud)

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

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


Din*_*rma 8

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

还有更多文章可供选择.


Min*_*wzy 5

什么是意图?

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

android中有两种类型的意图:

隐含意图
明确意图

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

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

startActivity(i);
Run Code Online (Sandbox Code Playgroud)

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

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

startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

你可以阅读更多

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