Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 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 .....
    }

Надеюсь, он сработает с вами.