как узнать звонки в андроиде - PullRequest
32 голосов
/ 11 февраля 2011

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

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

Ответы [ 7 ]

54 голосов
/ 30 августа 2012

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

34 голосов
/ 11 февраля 2011

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) Проверьте значение этого дополнительного параметра в Деятельности2 и действуйте соответствующим образом.

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;
        }
9 голосов
/ 20 мая 2013

В вашей телефонной деятельности (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 не может быть нулевым, когда вы выполняете "b.getString (" classFrom ")".

2 голосов
/ 11 февраля 2011

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

1 голос
/ 20 ноября 2012

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

0 голосов
/ 27 августа 2017

Я использую эту строку

    if (((((ActivityManager) getSystemService(Context.ACTIVITY_SERVICE)).getRunningTasks(1).get(0).baseActivity)).compareTo(new ComponentName(getPackageName()
                    , AnyActivityWantToCheck.class.getName())) == 0){
// do somthing .....
    }

Я надеюсь, что она будет работать с вами

0 голосов
/ 29 июня 2016

Передайте что-нибудь (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{
     //...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...