Android隐式和显式意图

时间:2012-11-05 21:24:46

标签: java android

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

对于这个隐含意图:

  

Intent searchintent = new Intent()
                    searchintent.setAction(Intent.ACTION_VIEW)                     searchintent.setData(Uri.parse( “http://www.google.com”))                     startActivity(searchintent)

如何设置其他操作以及如何将setData与Uri参数以外的其他方式一起使用?

我只是试图理解这两种意图。

由于

4 个答案:

答案 0 :(得分:5)

隐式意图是指您想要执行操作但不知道用户当前有哪些应用程序来处理该操作。 例如,发送电子邮件,有许多应用程序,因此用户可以选择他想要使用的应用程序。

显式意图用于启动应用程序中的活动(如果您具有main活动)和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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

2)将数据设置为Intent:如果被调用的动作需要一些参数,则需要这样做。 这个参数可以是很多类型,因此它可以是String或Integer作为示例。您可以将这些类型的数据捆绑在“Bundle”中,并将其放入Intent中。 具有指定操作和数据的被调用活动处理所有这些以及可能的事情, 否则会抛出错误或者什么都没有。

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

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

答案 3 :(得分:0)

  1. 显式意图用于调用特定组件。当您知道要启动哪个组件并且不希望让用户可以自由控制要使用的组件时。例如,您有一个具有2个活动的应用程序。活动A和活动B.您想要从活动A启动活动B.在这种情况下,您可以定义一个明确的意图定位活动B,然后使用它直接调用它。
  2. 当您知道自己想要做什么时会使用隐式意图,但您不知道应该启动哪个组件。或者,如果您希望为用户提供在要使用的组件列表之间进行选择的选项。如果将这些Intent发送到Android系统,它将搜索为特定操作和数据类型注册的所有组件。如果只找到一个组件,Android将直接启动该组件。例如,您有一个使用相机拍照的应用程序。您的应用程序的一个功能是,您可以让用户发送他拍摄的照片。您不知道用户可以发送照片的应用程序类型,并且您还希望为用户提供选项,以便在有多个外部应用程序时选择使用该应用程序。在这种情况下,您不会使用明确的意图。相反,你应该使用一个隐含的意图,其动作设置为ACTION_SEND,其数据额外设置为照片的URI。
  3. 无论它包含什么,明确的意图总是传递给它的目标;不咨询过滤器。但只有当组件可以通过组件的一个过滤器

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