¿Cómo encontrar Intent source en Android?
Posible duplicado:
Android: ¿Cómo obtener el remitente de una Intención?
¿Hay alguna manera en android para encontrar la actividad de origen que desencadena un INTENTO (en la actividad de destino)?
- Android Emulator informa de 600x1024 MDPI como XLarge?
- ¿Qué resolución debería tener mi pantalla de bienvenida de Android?
- Android: Tamaño de texto de Canvas.drawText () en diferentes resoluciones de pantalla
- Carpetas dibujables para computadoras de mano de alta resolución
- Android visualiza la transformación de rotación 3D en pantallas de gran resolución
El escenario es que tengo dos actividades A y B. Ambos disparan una intención de llamar a la actividad C. La actividad C muestra información adicional basada en su fuente. P.ej. Si la llamada viene de A, entonces C muestra sólo 2 vistas de texto, mientras que en el caso de intención disparada por B la actividad C muestra 3 vistas de texto (básicamente, más información basada en quién es la persona que llama).
Para establecer esto, necesito saber quién disparó la intención de llamar a C. ¿Cómo hago esto?
- ¿Por qué Android está buscando los recursos QVGA en el orden incorrecto mdpi> hdpi> ldpi?
- ¿Cómo encontrar Intent source en Android?
- ¿Cuál es el tamaño óptimo de bitmap para las carpetas ldpi / mdpi / hdpi / xhdpi extraíbles?
- Android MediaCodec: Reduce el tamaño del video mp4
- ¿Cómo diferenciar el diseño para 480 * 800 y 480 * 854 resoluciones de pantalla en android?
- ¿Cómo puedo configurar el ancho de los botones de radio para cambiar con respecto al tamaño de la pantalla? (androide)
- Mover sprite en Andengine
- Qt Android. Obtener resolución de pantalla del dispositivo
Una mejor manera de hacer esto sería utilizar los extras de Intent para pasar parámetros al receptor.
Si nos fijamos en la clase Intent.java, podemos ver sólo los miembros 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 incluyan información del remitente, haciendo la respuesta a la pregunta no. Usted no podría hacer esto para una intención arbitraria.
¿Podría esto considerarse una solución?
Tenga A & B llamada startActivityForResult
lugar de startActivity
, entonces usted 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<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 baseIntent en la parte superior de la pila de tareas recientes era el identificador más fiable. Hay más discusión sobre por qué es posible que no quiera hacer esto en https://stackoverflow.com/a/12376775/1135142
Supongo que si tienes algún control sobre A y B, podrías pedirles que pidan un resultado como ya se mencionó.