2012-11-05 95 views
3

当使用隐式意图vs显式意图时?Android隐式和显式意图

对于这个隐式意图:

意图searchintent =新意图()
searchintent.setAction(Intent.ACTION_VIEW) searchintent.setData(Uri.parse(“http://www.google。 COM“)) startActivity(searchintent)

我将如何设置另一个动作,我怎么会用使用setData比一个URI参数以外的东西?

我只是一般试图了解这两种类型的意图的。

感谢

回答

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或可分区对象

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

0

你可以使用一个隐含的意图,如果你需要完成的动作都可以通过各种各样的应用程序或应用程序是不是你完成。例如,条码扫描,接触采摘,短信/电子邮件等....

当你想控制处理的意向活动(明确意图的使用,应使用即为什么你传递一个类定义的意图)。

0

意图是简单地调用其他活动。 1)在OnCreate()方法中,活动正在寻找一个有效的动作(如在你的调用“ACTION_VIEW”中)。如果该行为有效且可由该活动调用,则调用此活动中的某个函数并“回答”您的请求。 (当用“startActivityForResult”调用时)。

2)数据设置为意图:这是需要,如果被叫动作需要一些参数。 这个参数可以是很多类型,所以它可以是一个String或Integer作为例子。您可以将这些类型的数据捆绑到一个“捆绑”中,并将其放入您的Intent中。 被调用的活动与指定的操作和数据处理所有的事情,如果可能的话, 否则它会抛出一个错误或什么。

在你的代码示例,您调用打开一个浏览器(因为android系统知道如何处理“ACTION_VIEW”用URL参数活动,其通过垫层android系统定义的系统默认行为 。

如果你写你自己的活动,你可以定义公共变量为“行动”,并可以处理你的onCreate方法,即使有需要的参数。

+0

感谢大家! – nerdperson

0
  1. 显式意图被用来调用特定的组件。当您知道要启动哪个组件时,并且不想让用户自由控制要使用哪个组件。例如,您有一个具有2个活动的应用程序。活动A和活动B.您想从活动A启动活动B.在这种情况下,您可以定义明确的目标活动B,然后使用它直接调用它。
  2. 当你知道你想要做什么时,使用隐式意图,但是你不知道应该启动哪个组件。或者如果您想让用户在要使用的组件列表中进行选择的选项。如果这些Intents被发送到Android系统,它将搜索为特定操作和数据类型注册的所有组件。如果只找到一个组件,Android会直接启动组件。例如,您有一个使用相机拍摄照片的应用程序。您的应用程序的一个特点是,您可以让用户发送他拍摄的照片。您不知道用户具有哪种可以发送照片的应用程序,并且您还想让用户选择使用哪个外部应用程序(如果他有多个应用程序)。在这种情况下,你不会使用明确的意图。相反,您应该使用隐式意图,将其操作设置为ACTION_SEND,并将其数据额外设置为照片的URI。

明确的意图总是传递给它的目标,不管它包含了什么;没有咨询过滤器。但是,只有通过组件的过滤器之一才能将隐含意图传递给组件。