我们什么时候填写Intents的参数?

时间:2015-01-29 02:17:44

标签: android android-intent

目前自学Android。

我的问题是我何时需要使用参数来实例化Intent

有时我写这个:

Intent baseIntent = new Intent(Intent.ACTION_VIEW, googleURI);

其他时间:

Intent explicitIntent = new Intent(this, ExplicitlyLoadedActivity.class);

甚至有时间如下:

Intent intent = new Intent();

何时填写构造函数的参数?

什么样的参数?

修改

我想说清楚。

当我说“何时”时,我并不是说当我想创建一个空构造函数时,我应该使用new Intent();

我知道new Intent()会导致空构造函数。我的意思是在什么情况下我想使用空构造函数,因此使用new Intent();

3 个答案:

答案 0 :(得分:1)

关于意图:

意图用于在组件(活动,服务,广播接收器)之间交换数据,但不是直接交换。这些组件将其意图发送到操作系统,然后操作系统将转发到目标组件。

意图包含以下元素:操作数据组件名称类别额外标志

您可以通过这些组合构建新意图。


如果您想要启动一项新活动,那么只需使用显式组件名称(类)创建一个意图(如果您想提供一些数据,可以额外添加此意图那个活动)。

Intent intent = new Intent(this, DisplayMessageActivity.class);
startActivity(intent);

您可以使用广播接收器注册系统事件(如启动完毕,电量不足,来电等)。当某些事情发生时,您将获得一个包含ACTION的意图,根据此操作,您可以决定正在进行的事件。 (例如,Intent.ACTION_BOOT_COMPLETED)

您还可以创建自己的操作,并向自己发送广播。

Intent in = new Intent("SOMEACTION");
sendBroadcast(in);

隐含意图。

如果您将意图的组成部分留空,则操作系统将搜索可以处理此问题的正确应用程序。 例如:

如果您想给某人打电话,那么您需要使用您的数据(电话号码)添加所需的操作,并将组件参数留空。

Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + "Your Phone_number"));
startActivity(intent);

答案 1 :(得分:0)

1. Intent(),创建一个空意图

public Intent() {
}

2. Intent(Intent o),复制构造函数

public Intent(Intent o) {
    this.mAction = o.mAction;
    ....
}

3. Intent(String action),使用给定的操作创建意图

public Intent(String action) {
    setAction(action);
}

4. Intent(String action, Uri uri),使用给定的操作和给定的数据URL创建意图

public Intent(String action, Uri uri) {
    setAction(action);
    mData = uri;
}

5. Intent(Context context, Class<?> cls),为特定组件创建意图

public Intent(Context packageContext, Class<?> cls) {
    mComponent = new ComponentName(packageContext, cls);
}

6. Intent(String action, Uri uri, Context packageContext, Class<?> cls),为具有指定操作和数据的特定组件创建意图

public Intent(String action, Uri uri,
        Context packageContext, Class<?> cls) {
    setAction(action);
    mData = uri;
    mComponent = new ComponentName(packageContext, cls);
}

并且所有参数都有get&amp; set方法,例如:

Intent baseIntent = new Intent(Intent.ACTION_VIEW, googleURI);

等于

Intent baseIntent = new Intent();
baseIntent.setAction(Intent.ACTION_VIEW);
baseIntent.setData(googleURI);

并且

Intent explicitIntent = new Intent(this, ExplicitlyLoadedActivity.class);

等于

Intent explicitIntent = new Intent();
explicitIntent.setComponent(new Component(this, ExplicitlyLoadedActivity.class));

希望它有所帮助。

答案 2 :(得分:0)

Intent的主要内容是ACTION(可能是CATEGORY),这也是初始化Intent的原因(你可以从Manifest中看到一个IntentFilter的详细信息,它肯定显示了Intent的目的) 例如:创建Intent以手动启动活动,或从已安装的应用程序启动活动,......

没有太多理由通过空构造函数创建一个Intent(我经常通过空构造函数创建,然后使用SET方法添加动作,类别,包数据......)。当没有针对此Intent的动作时,意图的目的变得不太清楚。例如:当在Activity中使用setResult()时,你可以放回一个包含数据的Intent,不需要为该Intent放置一个动作。