Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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

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?

  • Android - Google Play filtrando xxhdpi
  • La mayoría de los tamaños de pantalla populares / resoluciones en los teléfonos Android
  • Cómo calcular dp de píxeles en android programaticamente
  • Convertir píxeles en dp
  • Android y el soporte de múltiples diseños de pantallas
  • ¿Hay una manera de determinar la altura de la pantalla física de android en cm o pulgadas?
  • ¿Cómo encontrar Intent source en Android?
  • Android Emulator informa de 600x1024 MDPI como XLarge?
  • 4 Solutions collect form web for “¿Cómo encontrar Intent source en Android?”

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

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.