Как узнать вызывающую деятельность в android

У меня есть деятельность, которая называется несколькими другими действиями. Например: у меня есть Activity1, Activity2, Activity3. Activity1 вызывает Activity2 и параметр pass. Activity3 также вызывает Activity2 и параметр pass.

Теперь на основе вызывающей активности Activity2 выполняет определенную задачу. Но как я узнаю, какая активность вызывает Activity2? Может кто-нибудь PLZ помочь мне ??

Solutions Collecting From Web of "Как узнать вызывающую деятельность в android"

A. Если вы можете использовать startActivityForResult

В соответствии с ответом Заина Али : Если вы можете запустить Activity с помощью startActivityForResult (), вы можете получить имя вызова класса Activity this.getCallingActivity (). GetClassName ();

B. Если вы не можете использовать startActivityForResult

Если вы не можете использовать startActivityForResult (), вы можете использовать следующий метод: вы можете передать дополнительный параметр в намерении, проверить значение в действии и действовать соответствующим образом.

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 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; } 

Если вы начнете свою деятельность с помощью startActivityForResult(Intent, int) , то вы можете получить вызов функции getCallingActivity().getClassName() .

В вашей вызывающей деятельности (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 } 

Обратите внимание, что вы должны быть осторожны, потому что объект bundle не может быть null, когда вы выполняете «b.getString (« classFrom »)».

Вы можете передать дополнительный параметр, определяющий вызывающую Activity .

Я успешно использую: (Activity) .getLocalClassName ()

Передайте что-нибудь (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{ //... }