Jak znaleźć Intent source w Androidzie? [duplikat]
Możliwy duplikat:
Android: jak zdobyć nadawcę intencji?
Czy istnieje sposób w Androidzie, aby znaleźć aktywność źródłową, która uruchamia intencję (w aktywności docelowej)?
Scenariusz jest taki, że mam dwie czynności A I B. obie odpalają z zamiarem wywołania czynności C. Ćwiczenie C wyświetla dodatkowe informacje na podstawie źródła. Np. Jeśli wywołanie pochodzi z a to C wyświetla tylko 2 textviews natomiast w przypadku intencji wywołanej przez B ćwiczenie C wyświetla 3 wyświetlenia tekstu(zasadniczo więcej informacji na podstawie tego, kto jest dzwoniącym).
Aby to ustalić, muszę wiedzieć, kto wystrzelił intencję wzywającą C . Jak to zrobić?
4 answers
Lepszym sposobem na to byłoby użycie dodatków intencyjnych do przekazywania parametrów do odbiornika.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-25 01:52:40
Jeśli przyjrzymy się intencji.Klasa java, widzimy tylko członków
private String mAction;
private Uri mData;
private String mType;
private String mPackage;
private ComponentName mComponent;
private int mFlags;
private HashSet<String> mCategories;
private Bundle mExtras;
Myślę, że żaden z tych członków nie zawiera informacji o nadawcy, dając odpowiedź na pytanie nie. Nie mogłeś tego zrobić z arbitralnych intencji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-30 23:11:59
Czy można to uznać za obejście?
Mieć wywołanie & B startActivityForResult
zamiast startActivity
, wtedy możesz wywołać getCallingActivity().getClassName()
, aby odzyskać źródło.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-27 00:57:08
Jeśli aplikacja C ma uprawnienia GET_TASKS, możesz zobaczyć, jakie było ostatnie zadanie.
ActivityManager man = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RecentTaskInfo> list = man.getRecentTasks(1, 0);
//You might want to check if(list.size() > 0)
Intent caller = list.get(0).baseIntent;
//look at caller.getComponent() for the package and class
W moich testach odkryłem, że baseIntent na górze ostatniego stosu zadań był najbardziej wiarygodnym identyfikatorem. Jest więcej dyskusji o tym, dlaczego nie chcesz tego robić w https://stackoverflow.com/a/12376775/1135142
Przypuszczam, że jeśli masz jakąkolwiek kontrolę nad A i B, możesz poprosić je o wynik, jak już wspomniano.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:17:42