首页 文章

Android隐式和显式意图

提问于
浏览
3

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

对于这个隐含意图:

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

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

我只是试图理解两种类型的意图 .

谢谢

4 回答

  • 0

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

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

  • 5

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

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

  • 0

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

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

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

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

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

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

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

相关问题