intents - ¿Cómo encontrar fuente de intención en Android?
intent-filter (4)
¿Podría esto ser considerado una solución?
Haga que A & B llame a startActivityForResult
lugar de startActivity
, luego puede llamar a getCallingActivity().getClassName()
para recuperar el origen.
Posible duplicado:
Android: ¿cómo obtener el remitente de un intento?
¿Hay alguna manera en Android para encontrar la actividad fuente que desencadena una INTENCIÓN (en la actividad de destino)?
El escenario es que tengo dos actividades A y B. Ambas activan la actividad C. La Actividad C muestra información adicional según su fuente. P.ej. Si la llamada proviene de A, entonces C solo muestra 2 textviews, mientras que en el caso de intento disparado por B, la actividad C muestra 3 textviews (básicamente, más información según quién llama).
Para establecer esto, necesito saber quién disparó la intención llamando a C. ¿Cómo hago esto?
Si la aplicación C tiene el permiso GET_TASKS, puede ver cuál fue la tarea más reciente.
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
En mis pruebas, encontré que el subyacente en la parte superior de la pila de tareas recientes era el identificador más confiable. Hay más discusión sobre por qué es posible que no desee hacer esto en https://.com/a/12376775/1135142
Supongo que si tienes control sobre A y B, podrías hacer que pidan un resultado como se mencionó anteriormente.
Si miramos la clase Intent.java, podemos ver que los miembros solo están incluidos
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;
No creo que ninguno de estos miembros incluya información del remitente, por lo que la respuesta a la pregunta es no. No podrías hacer esto por un intento arbitrario.
Una mejor forma de hacerlo sería usar los extras de Intent para pasar los parámetros al receptor.