使用隐式意图与显式意图?
对于这个隐含意图:
Intent searchintent = new Intent()searchintent.setAction(Intent.ACTION_VIEW)searchintent.setData(Uri.parse(“http://www.google.com”))startActivity(searchintent)
我如何设置另一个动作以及如何将setData与Uri参数以外的其他东西一起使用?
我只是试图理解两种类型的意图 .
谢谢
隐式意图是您想要执行操作但不知道用户当前有哪些应用程序来处理该操作 . 例如,发送电子邮件,有许多应用程序,因此用户可以选择他想要使用的应用程序 .
显式意图用于在应用程序中启动活动(如果您具有main活动)和secondActivity,并且您希望启动您调用显式意图的第二个活动 .
StartActivity(new Intent(getBaseContext(), secondActivity.class));
您可以通过向使用Intent传递的bundle添加额外内容来在活动之间传递数据 .
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
如果您需要完成的操作可以由各种应用程序或不属于您的应用程序完成,则可以使用隐式intent . 例如,条形码扫描,联系人拣选,短信/电子邮件等....
当您想要控制处理意图的活动时(即,为什么将类定义传递给intent),应该使用显式意图用法 .
意图只是调用其他活动 . 每个活动以下列方式处理此调用(作为您的调用):
1)在OnCreate()方法中,活动正在寻找有效的操作(如在您的调用“ACTION_VIEW”中) . 如果此操作的操作有效且可以调用,则会调用此活动中的函数并“回答”您的请求 . (使用“startActivityForResult”调用时) .
2)将数据设置为Intent:如果被调用的动作需要一些参数,则需要这样做 . 这个参数可以是很多类型,因此它可以是String或Integer作为示例 . 您可以将这些类型的数据捆绑在“Bundle”中,并将其放入Intent中 . 具有指定操作和数据的被调用活动处理所有这些以及可能的事情,否则会抛出错误或者什么 .
在您的代码示例中,您调用打开浏览器的活动(因为android系统知道如何使用URL参数处理“ACTION_VIEW”,以及由底层安卓系统定义的系统默认行为 .
如果您编写自己的活动,则可以将公共变量定义为“操作”,并且可以在OnCreate方法中处理,即使使用了所需的参数 .
无论它包含什么,明确的意图总是传递给它的目标;不咨询过滤器 . 但只有当组件可以通过其中一个时,才会将隐式意图传递给组件组件的过滤器
4 回答
隐式意图是您想要执行操作但不知道用户当前有哪些应用程序来处理该操作 . 例如,发送电子邮件,有许多应用程序,因此用户可以选择他想要使用的应用程序 .
显式意图用于在应用程序中启动活动(如果您具有main活动)和secondActivity,并且您希望启动您调用显式意图的第二个活动 .
您可以通过向使用Intent传递的bundle添加额外内容来在活动之间传递数据 .
要在第二个活动中取回附加功能,请致电:
或者,如果您只想获得通过的“数据”uri,您可以致电
额外的可以是例如int / double / String或parcable对象
http://developer.android.com/reference/android/os/Parcelable.html
如果您需要完成的操作可以由各种应用程序或不属于您的应用程序完成,则可以使用隐式intent . 例如,条形码扫描,联系人拣选,短信/电子邮件等....
当您想要控制处理意图的活动时(即,为什么将类定义传递给intent),应该使用显式意图用法 .
意图只是调用其他活动 . 每个活动以下列方式处理此调用(作为您的调用):
1)在OnCreate()方法中,活动正在寻找有效的操作(如在您的调用“ACTION_VIEW”中) . 如果此操作的操作有效且可以调用,则会调用此活动中的函数并“回答”您的请求 . (使用“startActivityForResult”调用时) .
2)将数据设置为Intent:如果被调用的动作需要一些参数,则需要这样做 . 这个参数可以是很多类型,因此它可以是String或Integer作为示例 . 您可以将这些类型的数据捆绑在“Bundle”中,并将其放入Intent中 . 具有指定操作和数据的被调用活动处理所有这些以及可能的事情,否则会抛出错误或者什么 .
在您的代码示例中,您调用打开浏览器的活动(因为android系统知道如何使用URL参数处理“ACTION_VIEW”,以及由底层安卓系统定义的系统默认行为 .
如果您编写自己的活动,则可以将公共变量定义为“操作”,并且可以在OnCreate方法中处理,即使使用了所需的参数 .
当你想知道你想做什么,但你不知道应该启动哪个组件时,会使用
无论它包含什么,明确的意图总是传递给它的目标;不咨询过滤器 . 但只有当组件可以通过其中一个时,才会将隐式意图传递给组件组件的过滤器