tesis sobre investigaciones investigacion historia caracteristicas android

android - historia - investigaciones sobre youtube pdf



¿Cómo obtener el remitente de un Intento? (6)

¿Es una aplicación externa de la que recibes la intención? Podría usar el método getReferrer() de la clase de actividad

Un ejemplo simple : abrí la aplicación Google Map para compartir una ubicación con mi aplicación usando la opción compartir de google maps. Luego mi aplicación se abre y este método llama a la Actividad:

this.getReferrer().getHost()

volverá:

com.google.android.apps.maps

ver documentación aquí: https://developer.android.com/reference/android/app/Activity.html#getReferrer()

Tenga en cuenta que esto requiere API 22. Para versiones anteriores de Android, vea la respuesta de ajwillliams

¿Hay alguna manera de que una Activity descubra quién (es decir, el nombre de la clase) ha enviado un Intent ? Estoy buscando una forma genérica para que mi Activity responda a un intento recibido enviándoles una copia al remitente, quienquiera que sea.


En función de su pregunta, dado que desea enviar un intento al remitente, startActivityForResult es una mejor opción que lo que voy a sugerir. Pero necesitaba comenzar la actividad B cuando el usuario hacía clic en una notificación y ejecutaba algún código en la actividad B solo si la actividad del remitente era la actividad A. Así es como lo hice de manera bastante simple.

Actividad interior A:

String senderName = this.getClass().getSimpleName(); Intent clickIntent = new Intent(ActivityA.this, ActivityB.class); clickIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); clickIntent.putExtra("SENDER_CLASS_NAME", senderName); //I use PendingIntent to start Activity B but you can use what you like such as this.startActivity(clickIntent); PendingIntent.getActivity(ActivityA.this, NOTIFICATION_ID, clickIntent, PendingIntent.FLAG_ONE_SHOT);

Actividad interior B:

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState == null) { Bundle bundle = getIntent().getExtras(); if (bundle != null) { if(bundle.containsKey("SENDER_CLASS_NAME")){ String senderName = bundle.getString("SENDER_CLASS_NAME"); //Execute some code Log.d("GCM", "Notifications clicked"); } } } }


Esto no es increíblemente directo, pero puede obtener una lista de las tareas recientes de ActivityManager. Entonces la persona que llama debería ser esencialmente la tarea antes que la tuya y puedes obtener información sobre esa tarea.

Ejemplo de uso:

ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); List<ActivityManager.RecentTaskInfo> recentTasks = am.getRecentTasks(10000,ActivityManager.RECENT_WITH_EXCLUDED);

Lo anterior devolverá una lista de todas las tareas desde la más reciente (suya) hasta el límite especificado. Consulte los documentos here para obtener el tipo de información que puede obtener de un objeto RecentTaskInfo.



Puede haber otra manera, pero la única solución que conozco es hacer que la Actividad A invoque la Actividad B a través de startActivityForResult() . Luego, la Actividad B puede usar getCallingActivity() para recuperar la identidad de la Actividad A.


Una técnica que uso es requerir que la aplicación envíe la intención relevante para agregar un PendingIntent como un adicional Parcelable; PendingIntent puede ser de cualquier tipo (servicio, difusión, etc.). Lo único que hace mi servicio es llamar a PendingIntent.getCreatorUid () y getCreatorPackage (); esta información se rellena cuando se crea el PendingIntent y la aplicación no puede forjarlo para que pueda obtener la información sobre el remitente de un Intent. La única advertencia es que la solución solo funciona desde Jellybean y más adelante, que es mi caso. Espero que esto ayude,