如何知道android中的调用活动

kan*_*oid 32 android android-activity

我有一项活动,很少有其他活动.例如:我有Activity1,Activity2,Activity3.Activity1调用Activity2并传递参数.Activity3还调用Activity2并传递参数.

现在基于调用活动,Activity2执行一些任务.但是我怎么知道哪个活动正在调用Activity2?任何人都可以帮助我?

Zai*_*Ali 55

如果你开始活动startActivityForResult(Intent, int),那么你可以通过以下方式获得呼叫活动getCallingActivity().getClassName().

  • 那么如何实际获取活动调用者的实际实例呢? (5认同)
  • @ralphgabb 只是删除 .getClassName() 部分 (4认同)

Uda*_*yan 34

A.如果可以使用startActivityForResult

根据Zain Ali的回答如下:如果你可以使用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;
}
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

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;
        }
Run Code Online (Sandbox Code Playgroud)


Car*_*los 9

在您的通话活动(FirstActivity)中:

Intent i = new Intent(FirstActivity.this, SecondActivity.class);
i.putExtra("classFrom", FirstActivity.class.toString());
startActivity(i);
Run Code Online (Sandbox Code Playgroud)

并在被调用活动的onCreate中添加以下代码(SecondActivity):

Bundle bundle = getIntent().getExtras();

if (bundle.getString("classFrom").equals(FirstActivity.class.toString())) {
     //Do some task
}
Run Code Online (Sandbox Code Playgroud)

请注意,您应该小心,因为当您执行"b.getString("classFrom")"时,bundle对象不能为null.