为什么在我们已经在setClassName中指定活动时指定了intent-filter?

时间:2017-02-22 05:56:37

标签: android android-intent

Intent sendIntent = new Intent(Intent.ACTION_VIEW);
sendIntent.setType("plain/text");
sendIntent.setData(Uri.parse("test@gmail.com"));
sendIntent.setClassName("com.google.android.gm", "com.google.android.gm.ComposeActivityGmail");
sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { "test@gmail.com" });
sendIntent.putExtra(Intent.EXTRA_SUBJECT, "test");
sendIntent.putExtra(Intent.EXTRA_TEXT, "hello. this is a message sent from my demo app :-)");
startActivity(sendIntent);

在上面的代码中,我很困惑为什么我们必须在ACTION_VIEW定义中指定操作:sendIntent?我们已经指定我们要使用sendIntent意图开始的活动是"com.google.android.gm", "com.google.android.gm.ComposeActivityGmail"活动。

我认为动作ACTION_VIEW的唯一目的是,如果您正在制作一个隐含的意图,并且您希望系统显示用户下载的具有Activity的所有应用程序执行动作ACTION_VIEW

但是在这种情况下,我们已经指定了我们要启动哪个活动ComposeActivityGmail,那么为什么要放置ACTION_CLOSE操作,因为系统已经为此意图启动了哪个活动。

1 个答案:

答案 0 :(得分:1)

您可以使用以下代码开始其他活动:

Intent intent = new Intent(this, Classname.class);
startService(intent);

如果您有一些活动可以向用户显示的信息,例如要在图库应用中查看的照片,或者要在地图应用中查看的地址,则ACTION_VIEWstartActivity()一起使用

在您的情况下,您传递的是电子邮件地址,这就是您必须使用它的原因。