6

我通过这段代码从另一个活动中调用一个活动:

Intent intent = new Intent(context, mClass);
context.startActivity(intent);

以及由此代码启动的我的新活动。我想知道哪个活动开始了这个活动。我为此目的使用了这段代码

Intent intent = getIntent();
Class<?> c = intent.getClass();
if (c != OffersActivity.class) {
    prepareForNotifications();
    setListAdapter();
}

但是通过这段代码,我无法获得启动此活动的类名。我真的需要一些帮助。

谢谢

4

4 回答 4

12

有一个方法getCallingActivity(),但只有在调用活动调用你时才有效startActivityForResult(). 我见过图书馆使用它并说你必须这样称呼它们,但坦率地说这有点讨厌。简单的答案是你不应该知道。Android 是一个松散耦合的活动系统,因此调用活动对您的活动没有实际意义。你的活动需要的任何信息都应该明确地放在意图中,所以如果你真的想知道谁给你打电话,那么调用者需要把这些额外的信息放进去。你当然无法判断他们是否在撒谎,所以不要不要尝试将其用于任何与安全相关的事情。但是,我建议您根据调用者确定的任何内容都是调用者应该传递给您的。可能是时候重新考虑一下为什么要这样做了,因为试图与系统抗争只会导致痛苦。

于 2012-12-28T16:42:10.517 回答
2

我会建议:

public static final String INTENTSENDER = "sender";

void mMethod() {
    Intent intent = new Intent(context, mClass);
    intent.putExtra(INTENTSENDER, mClass);
    context.startActivity(intent);
}

知道是谁寄的:

Class<?> c = (Class<?>)intent.getExtras().get(INTENTSENDER);

但是,您也可以使用这个:

ComponentName componentName = this.getCallingActivity();

现在,您可以使用componentName来获取意图的发送者。

于 2012-12-28T14:37:06.657 回答
1

也许最好在调用它们时在意图中使用额外参数......比如:调用者活动上的Intent.putExtra(PARAM,value) ......以及您检查的打开活动:

意图.getStringExtra(PARAM)

于 2012-12-28T14:27:33.560 回答
-2

getParentActivity() 不是您想要的?

于 2014-03-23T12:20:46.050 回答