我通过以下代码调用其他活动的活动:
Intent intent = new Intent(context, mClass);
context.startActivity(intent);
以及我的新活动,该活动由此代码启动。我想知道哪个活动开始此活动。我为此目的使用了这段代码
Intent intent = getIntent();
Class<?> c = intent.getClass();
if (c != OffersActivity.class) {
prepareForNotifications();
setListAdapter();
}
但是通过这段代码,我无法获得启动此活动的类名。我真的需要一些帮助。
感谢
答案 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)关于调用者活动......以及你检查的已打开活动:
答案 3 :(得分:-2)
getParent Activity()不是您要找的?