Как узнать вызывающую деятельность в android
У меня есть активность, которая называется несколькими другими действиями. Например: у меня есть Activity1, Activity2, Activity3.
Activity1 вызывает Activity2 и передает параметр.
Activity3 также вызывает Activity2 и параметр pass.
Теперь, основываясь на вызывающей активности, Activity2 выполняет определенную задачу.
Но как я узнаю, какая активность вызывает Activity2?
может ли кто-нибудь помочь мне?
Ответы
Ответ 1
а. Если вы можете использовать startActivityForResult
По Ответ Zain Ali ниже: Если вы можете запустить Activity с помощью startActivityForResult(), вы можете получить имя вызова класса Activity this.getCallingActivity(). getClassName();
В. Если вы не можете использовать 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;
}
Ответ 2
Если вы начинаете свою деятельность с помощью startActivityForResult(Intent, int)
, то вы можете получить активность вызова с помощью getCallingActivity().getClassName()
.
Ответ 3
В вашей вызывающей деятельности (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 ")".
Ответ 4
Вы можете передать дополнительный параметр, который указывает вызывающий Activity
.
Ответ 5
Я успешно использую: (Activity).getLocalClassName()
Ответ 6
Передайте что-нибудь (String/int и т.д.), чтобы putExtra и base на этом выполняете вашу работу, например
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{
//...
}
Ответ 7
Я использую эту строку
if (((((ActivityManager) getSystemService(Context.ACTIVITY_SERVICE)).getRunningTasks(1).get(0).baseActivity)).compareTo(new ComponentName(getPackageName()
, AnyActivityWantToCheck.class.getName())) == 0){
// do somthing .....
}
Надеюсь, он сработает с вами.