我有一项活动,很少有其他活动。例如:我有Activity1,Activity2,Activity3。 Activity1调用Activity2并传递参数。 Activity3还调用Activity2并传递参数。
现在基于调用活动,Activity2执行一些任务。 但是我怎么知道哪个活动正在调用Activity2? 谁能帮助我?
答案 0 :(得分:54)
如果您使用startActivityForResult(Intent, int)
开始活动,那么您可以按getCallingActivity().getClassName()
进行通话活动。
答案 1 :(得分:34)
:一种。如果你可以使用startActivityForResult
根据下面的Zain Ali's answer:如果你可以使用startActivityForResult()启动Activity,那么你可以通过this.getCallingActivity()获取调用Activity类的名称.getClassName();
<强> B中。如果你不能使用startActivityForResult
如果你不能使用startActivityForResult(),那么你可以使用以下方法: 您可以在intent中传递其他参数,检查活动中的值并采取相应的行动。
1)定义一个接口或常量类来定义整数常量以指示调用活动
public interface ActivityConstants {
public static final int ACTIVITY_1 = 1001;
public static final int ACTIVITY_2 = 1002;
public static final int ACTIVITY_3 = 1003;
}
2)在调用Activity2时在intent中添加额外参数。
Intent act2 = new Intent(context, Activity2.class);
act2.putExtra("calling-activity", ActivityConstants.ACTIVITY_1);
// or ActivityConstants.ACTIVITY_3 if called form Activity3
startActivity(act2);
3)检查Activity2中此额外参数的值并相应地采取行动..
int callingActivity = getIntent().getIntExtra("calling-activity", 0);
switch (callingActivity) {
case ActivityConstants.ACTIVITY_1:
// Activity2 is started from Activity1
break;
case ActivityConstants.ACTIVITY_3:
// Activity2 is started from Activity3
break;
}
答案 2 :(得分:9)
在您的通话活动(FirstActivity)中:
Intent i = new Intent(FirstActivity.this, SecondActivity.class);
i.putExtra("classFrom", FirstActivity.class.toString());
startActivity(i);
在被调用活动的onCreate(SecondActivity)中添加以下代码:
Bundle bundle = getIntent().getExtras();
if (bundle.getString("classFrom").equals(FirstActivity.class.toString())) {
//Do some task
}
请注意,您应该小心,因为执行“b.getString(”classFrom“)”时,bundle对象不能为null。
答案 3 :(得分:2)
您可以传递一个额外的参数来指定调用Activity
。
答案 4 :(得分:1)
我成功使用:( Activity).getLocalClassName()
答案 5 :(得分:0)
将任何东西(String / int等)传递给putExtra并以你的工作为基础
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("PARENT_ACTIVITY_REF", "ParentActivityIsA");
startActivity(intent);
然后像孩子那样收到
String parentActivityRef = intent.getStringExtra("PARENT_ACTIVITY_REF");
然后
if (parentActivityRef.equals("ParentActivityIsA"){
// do your work here
}else if ...{
// ...
}else{
//...
}
答案 6 :(得分:0)
另一种解决方案,使用伴生对象,如下例所示:
class MainActivity: BaseActivity {
...
LoginActivity.callerActivity = this
it.context.startActivity(Intent(getActivity(), LoginActivity::class.java))
...
}
class LoginActivity : BaseActivity() {
companion object {
var callerActivity: AppCompatActivity? = null
}
...
callerActivity?.let {
it.callSomething()
}
}
答案 7 :(得分:-1)
我正在使用此行
if (((((ActivityManager) getSystemService(Context.ACTIVITY_SERVICE)).getRunningTasks(1).get(0).baseActivity)).compareTo(new ComponentName(getPackageName()
, AnyActivityWantToCheck.class.getName())) == 0){
// do somthing .....
}
我希望它能与你合作