从其他一些活动中获取呼叫活动

时间:2012-12-28 14:24:15

标签: android android-activity

我通过以下代码调用其他活动的活动:

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

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

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

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

感谢

4 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分: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来获取意图的发件人。

答案 2 :(得分:1)

也许最好在你打电话时在意图中使用extras参数...比如:Intent.putExtra(PARAM,value)关于调用者活动......以及你检查的已打开活动:

intent.getStringExtra(PARAM)

答案 3 :(得分:-2)

getParent Activity()不是您要找的?