¿Cómo encontrar fuente de intención en Android?

Posible duplicado:
Android: ¿cómo obtener el remitente de un bash?

¿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 bash 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?

Una mejor forma de hacerlo sería usar los extras de Intent para pasar los parámetros al receptor.

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 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 bash arbitrario.

¿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.

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 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 stack 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://stackoverflow.com/a/12376775/1135142

Supongo que si tienes control sobre A y B, podrías hacer que pidan un resultado como se mencionó anteriormente.