3

何时使用隐式意图与显式意图?

对于这个隐式意图:

意图 searchintent = new Intent()
searchintent.setAction(Intent.ACTION_VIEW) searchintent.setData(Uri.parse("http://www.google.com")) startActivity (searchintent)

我将如何设置另一个操作以及如何将 setData 与 Uri 参数以外的东西一起使用?

我通常只是试图理解这两种类型的意图。

谢谢

4

4 回答 4

5

隐式意图是当您想要执行某个操作但您不知道用户当前必须使用哪个应用程序来处理该操作时。例如发送一封电子邮件,有很多应用程序可以让用户选择他想要使用的应用程序。

显式意图用于启动应用程序中的活动,如果您有 mainactivity 和 secondActivity,并且您想启动称为显式意图的第二个活动。

StartActivity(new Intent(getBaseContext(), secondActivity.class));

您可以通过将额外内容添加到与 Intent 一起传递的包中来在活动之间传递数据。

Intent i = new Intent(getBaseContext, secondActivity.class);
i.putExtra("key",value);
startActivity(i);

要在您的第二个活动中取回额外内容,只需致电:

getIntent().getStringExtra("key");

或者,如果您只想获取传递的“数据”uri,您可以调用

getIntent().getData();

额外的可以是例如 int/double/String 或 parcable 对象

http://developer.android.com/reference/android/os/Parcelable.html

于 2012-11-05T21:35:09.813 回答
0

如果您需要完成的操作可以由多种应用程序或不属于您的应用程序完成,您将使用隐式意图。例如,条码扫描、联系人拣选、短信/电子邮件等......

当您想要控制处理意图的活动时(即为什么将类定义传递给意图),应该使用显式意图使用。

于 2012-11-05T21:34:40.243 回答
0

意图只是对其他活动的调用。每个活动都以下列方式处理这个调用(作为你的):

1) 在 OnCreate() 方法中,活动正在寻找有效的操作(如在您的调用“ACTION_VIEW”中)。如果此活动有效且可调用该操作,则会调用此活动中的一个函数并“回答”您的请求。(当使用“startActivityForResult”调用时)。

2) 将数据设置为 Intent:如果调用的操作需要一些参数,则需要这样做。这个参数可以是很多种类型,比如可以是String或者Integer。您可以将此类数据捆绑在一个“捆绑包”中,并将其放入您的 Intent 中。如果可能,具有指定操作和数据的被调用活动会处理所有这些和事情,否则它会引发错误或其他任何事情。

在您的代码示例中,您调用打开浏览器的活动(因为 android 系统知道如何使用 URL 参数处理“ACTION_VIEW”,并且它是由底层 android 系统定义的系统默认行为。

如果您编写自己的活动,则可以将公共变量定义为“动作”,并且可以在 OnCreate 方法中处理它,即使使用所需的参数也是如此。

于 2012-11-05T21:36:08.987 回答
0
  1. 显式意图用于调用特定组件。当您知道要启动哪个组件并且不想让用户自由控制要使用的组件时。例如,您有一个具有 2 个活动的应用程序。活动 A 和活动 B。您希望从活动 A 启动活动 B。在这种情况下,您定义了一个针对活动 B 的显式意图,然后使用它直接调用它。
  2. 当您知道要做什么但不知道应该启动哪个组件时,可以使用隐式 Intent。或者,如果您想为用户提供在要使用的组件列表之间进行选择的选项。如果这些 Intent 被发送到 Android 系统,它会搜索为特定操作和数据类型注册的所有组件。如果只找到一个组件,Android 直接启动该组件。例如,您有一个使用相机拍照的应用程序。您的应用程序的功能之一是您可以让用户发送他拍摄的照片。你不知道用户有什么样的应用程序可以发送照片,如果用户有多个应用程序,你也想给用户一个选项来选择使用哪个外部应用程序。在这种情况下,您不会使用显式意图。

An explicit intent is always delivered to its target, no matter what it contains; the filter is not consulted. But an implicit intent is delivered to a component only if it can pass through one of the component's filters

于 2013-12-22T10:52:29.883 回答