如何知道android中的调用活动

时间:2011-02-11 10:12:57

标签: android android-activity

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

现在基于调用活动,Activity2执行一些任务。 但是我怎么知道哪个活动正在调用Activity2? 谁能帮助我?

8 个答案:

答案 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 .....
    }

我希望它能与你合作