我们已经在 setClassName 中指定了活动,为什么还要指定一个 intent-filter?

问题描述 投票:0回答:1
Intent sendIntent = new Intent(Intent.ACTION_VIEW);
sendIntent.setType("plain/text");
sendIntent.setData(Uri.parse("[email protected]"));
sendIntent.setClassName("com.google.android.gm", "com.google.android.gm.ComposeActivityGmail");
sendIntent.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" });
sendIntent.putExtra(Intent.EXTRA_SUBJECT, "test");
sendIntent.putExtra(Intent.EXTRA_TEXT, "hello. this is a message sent from my demo app :-)");
startActivity(sendIntent);

在上面的代码中(来自 Jared Burrows 的回答)我很困惑为什么我们必须在

ACTION_VIEW
定义中指定动作:
sendIntent
?我们已经指定要使用
sendIntent
意图开始的活动是
"com.google.android.gm", "com.google.android.gm.ComposeActivityGmail"
活动。

我认为该操作

ACTION_VIEW
的唯一目的是,如果您正在进行隐式意图并且您希望系统显示用户下载的所有应用程序,这些应用程序具有可以执行该操作的
Activity
ACTION_VIEW

但在这种情况下,我们已经指定了我们要启动的活动是

ComposeActivityGmail
,所以为什么要放置
ACTION_CLOSE
操作,因为系统已经为此目的启动了哪个活动。

android android-intent
1个回答
0
投票

您可以使用以下代码开始另一个活动:

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

当您有一些活动可以向用户显示的信息(例如要在图库应用程序中查看的照片或要在地图应用程序中查看的地址)时,您可以将

ACTION_VIEW
startActivity()
一起使用。

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

© www.soinside.com 2019 - 2024. All rights reserved.