«

»

feb 02 2012

Como incluir la función compartir en nuestras apps

Nos encontramos en un sociedad cada vez mas social, suena redundante pero es así, lo compartimos todo, que vemos, que comemos, donde vamos, incluso que pensamos y esto es aun más palpable desde el boom de los smartphones y las apps para estos. Cada vez es más normal ver en estas apps la función de enviar o compartir y como seguro que mas tarde o mas temprano querremos incluir esta en nuestras apps hoy os contamos como.

Cuando diseñaron Android lo tenían claro, querían generar sinergia entre todo el ecosistema de aplicaciones y que cada una de estas no se limitara a ser solo una aplicación si no que pudiera formar parte de un todo. Bajo esta filosofía Google nos proporciono las herramientas necesarias para conseguir que las aplicaciones se comunicaran entre si y compartieran funcionalidades. Este es el caso de la funcionalidad de enviar, a la hora de implementar nuestras apps podremos abrir una puerta para que otras aplicaciones las usen para enviar datos a través de nuestra aplicación y hoy os vamos a contar como usar estas puertas para enviar datos.

 

Supongamos que desde nuestra aplicación que graba audio queremos enviar este por mail, a dropbox o whatsapp, pues será tan sencillo como incluir el siguiente código y el propio sistema nos mostrará todas las apps que pueden mandar este audio por nosotros:

 

Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType("audio/*");
sendIntent.putExtra(Intent.EXTRA_SUBJECT, "SpyTools: AudioRecord");
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + uri));

startActivity(Intent.createChooser(sendIntent, getString(R.string.compartir)));

 

Como podéis comprobar es muy sencillo y se gestiona todo a través de un Intent al que le pasaremos los parámetros necesarios. Indicaremos en primer lugar que la accion del intent es enviar y que el tipo de dato es “audio/*”, con esto conseguiremos que las aplicaciones que se nos muestren para elegir sean solo las que permiten el envío de este tipo de archivos.

Seguidamente quedará indicar el contenido del envío, el subject no es necesario pero será útil para casos como el email y el stream será nuestro fichero en cuestión. Es importante no olvidar añadir “file://” a la uri ya que si no hay algunas apps que no reconocen bien el fichero.

En la ultima sentencia lanzaríamos el itent para que se nos mostrara la pantalla de selección de la app pra el envío y le indicamos el titulo que queremos mostrar en esta ventana.

 

Con esto habríamos terminado, pero tener en cuenta que estos envíos no se limitan a lo que aquí comentamos, podríamos enviar otro tipo de archivos, desde imágenes a texto plano, indicar la direccion de email a donde enviar, incluir el texto del mail y mas opciones dependiendo de la aplicación a usar.

Espero os sirva de ayuda, pronto mas.

 

vía | IngensBlog

 

Acerca del autor

JMPergar

Mobile Developer at @BeRepublic & Founder of @AndroCode. Silver Speaker & Member of Core Team at @GDGBarcelona.

  • Victor

    Buen tutorial me ha servido de mucho.

    Ahora lo que quiero es enviar un fichero que tengo en R.raw o ponerlo como tono en caso de que sea un archivo mp3

    ¿Como lo puedo hacer?

  • Victor

    Hola,

    He conseguido hacer que comunique con las demás aplicaciones(whatSapp, email etc…)

    Pero lo que no consigo es que envie el fichero . me salta la aplicación pero no adjunta el archivo por así decirlo.

    Este es el código en cuestión:

    FileOutputStream destino = new FileOutputStream(new File(path+nombreFichero));
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType(“audio/*”);
    intent.putExtra(Intent.EXTRA_SUBJECT, “Prueba: Enviar audio”);
    intent.putExtra(Intent.EXTRA_STREAM, Uri.parse(“android.resource://com.a/” +R.raw.tono));
    startActivity(Intent.createChooser(intent, getString(R.string.app_name)));

    • http://www.linkedin.com/in/jmpergar JMPergar | Editor Jefe

      La uri debe empezar por “file://”

  • http://lionteamsoft.com Diego Franco

    Yo tengo una duda, si quiero compartir una imange, pero no desde una ruta establecida, sino que de una foto que acabo de tomar desde las misma app?

    mi codigo de la imagen es

    Bundle extras = data.getExtras();
    bmp = (Bitmap) extras.get(“data”);
    imgCaptured.setImageBitmap(bmp);

    como le haria para “llamar” a la imagen para compartirla?

    • http://www.linkedin.com/in/jmpergar JMPergar | Editor Jefe

      ¿Quieres decir sin que esta llegue a guardarse en memoria solida?

  • Hackobo

    Puede sonar un poco de principiante pero mi duda es: ¿Cómo hago para que comparta pero sólo texto? además me gustaría poner en el texto a compartir el contenido de alguna variable que se haya generado dentro de la aplicación, por ejemplo:

    El usuario dentro de la app logra un score de 1000 puntos, ¿qué tengo que hacer para que el texto a compartir incluya el contenido de la variable de los puntos? para quedar la de siguiente manera: “Obtuve (valor de la variable) puntos en el juego de Carreras, descárgalo ya de la Play Store”

    Ojalá me haya dado a entender y puedan responderme, estoy seguro de que la solución es muy sencialla. Saludos.

    • http://www.linkedin.com/in/jmpergar JMPergar | Editor Jefe

      Cambiarías el Type a solo texto y solo rellenarías el Subject, que en este caso lo rellenarías con los datos que quisieras como por ejemplo la puntuación.

  • xpLoxion

    Hola se que el post es un poco antiguo pero estoy intentando enviar un mensaje a whatsapp, ya funciona todo bien, pero siempre me pregunta a quien deseo enviare el mensaje de mis contactos. Hay alguna forma de pasarle el parametro del numero telefonico directamente como lo hacemos para los SMS?

    Intent msgIntent = new Intent(Intent.ACTION_SEND);

    msgIntent.putExtra(Intent.EXTRA_TEXT, “Mensaje de prueba Whatsapp”);
    Algo asi? –> msgIntent.putExtra(Intent.EXTRA_PHONE_NUMBER, “123456789″);
    msgIntent.setType(“text/plain”);

    startActivity(msgIntent);

  • http://estoyenello javi

    Muy buenas tardes JM, tengo una pregunta que no se si será difícil o fácil. Estoy programando una app en titanium y he conseguido poder compartir el enlace a una web con facebook, twitter, linkedin y google+, es posible también compartir con whatshapp? como podría programarlo?

    Muchas gracias de antemano

  • Daniel Pozo

    Hola. ¿Como puedo acceder a archivos que tengo en la carpeta Assets de mi app para compartirlos? Son audios, pero no sé como acceder a ellos a través del URI..

    Ayuda por favor!