Android 安卓:谁开始活动

Android 安卓:谁开始活动,android,Android,我有3个活动:活动1,活动2,活动3。Activity1和Activity3可以启动Activity2: startActivity新的意图,活动2 如何在Activity2中检查哪个类启动Activity2?有没有办法从意图中获取信息?谢谢 我不想把任何事情放在心上。我想我不需要那个。当我开始意图时,我已经在说我在什么样的环境下做了那个新的意图*这个*,活动2。这是我想在活动2中认识到的!!!这可能吗?您可以通过在意图中添加信息来实现这一点 例如: public Intent putExtra

我有3个活动:活动1,活动2,活动3。Activity1和Activity3可以启动Activity2:

startActivity新的意图,活动2

如何在Activity2中检查哪个类启动Activity2?有没有办法从意图中获取信息?谢谢


我不想把任何事情放在心上。我想我不需要那个。当我开始意图时,我已经在说我在什么样的环境下做了那个新的意图*这个*,活动2。这是我想在活动2中认识到的!!!这可能吗?

您可以通过在意图中添加信息来实现这一点

例如:

public Intent putExtra (name, value)
然后,您可以在新启动的服务中查找此信息


或者,您可以像在另一个答案中一样使用addFlags方法。

您可以使用Intents Extras在活动之间传递信息:

然后在接收活动中,您可以调用:

String fromActivity = getIntent().getStringExtra("CalledFrom");

您可以传递实现可包裹界面的基本类型和对象

您可以在您的意图的额外捆绑包中传递该信息:

在活动1中:

在活动2中:

对于其他数据类型,如boolean、int等,还有get/put额外的方法

至于为什么在另一端创建意图时无法访问您提供的上下文:

Android对提供的上下文(即您的this)所做的唯一一件事就是从中创建一个。该类仅保留所提供上下文的包,并丢弃任何其他内容

因此,从理论上讲,您可以将活动放入不同的包中,然后在接收端转到getIntent.getComponentName.getPackageName,但请不要这样做。意向附加是一种方法。

使用意向数据成员向您的活动传递参数。有一个extras数据成员,它是您想要的任何东西的捆绑包—一个通用名称/值集合

Intent i = new Intent(this, Activity2);
i.putExtra("From", "Activity1");
startActivity(i);
然后在Activity2中,您可以检查额外数据的起始意图,并找到答案

或者,您可以使用可通过setData设置的意图数据。数据成员具有URI的格式,这对传递结构化信息有点不友好。不过它的输入量稍微少一些。

要发送:

Intent intent = new Intent(this,Activity2)
intent.putExtra("activityNumber", 1);
startActivity(intent);
接收:

Bundle extras = getIntent().getExtras();
if (extras != null) {
    activitySource = extras.getInt("activityNumber");
}

在开始活动的意图中,您可以始终将pus标记为

Intent i=new Intent();
i.putExtra("startedBy","A1");
//or 
//i.putExtra("startedBy","A2");
//...
而不是在接收活动中使用 在on activityresult方法中

Intent intent=getIntent();
if(intent.getStringExtra("startedBy").equals("a1"){
//do somth
}

我发现使用类的简单名称的解决方案会导致ClassNotFoundException。我使用的解决方案与此类似,但使用规范名称:

Intent newIntent = new Intent(this, Activity2.class);
newIntent.putExtra("caller", Activity1.class.getCanonicalName())
startActivity(newIntent);
然后在另一项活动中

String caller = getIntent().getStringExtra("caller");
Class callingClass = Class.forName(caller);

您为什么创建一个单独的bundle bun以将其设置到intent的现有额外bundle中?是的,您确实希望在intent中添加一些内容,因为无法在另一端获取提供的上下文。另外,这也是Android的做法,不要反抗:查看下面我的答案,从技术上解释为什么你的这个丢失了;评论太长了。
Intent intent=getIntent();
if(intent.getStringExtra("startedBy").equals("a1"){
//do somth
}
Intent newIntent = new Intent(this, Activity2.class);
newIntent.putExtra("caller", Activity1.class.getCanonicalName())
startActivity(newIntent);
String caller = getIntent().getStringExtra("caller");
Class callingClass = Class.forName(caller);