Compartir una View, Imagen, en Android

ic_launcherEl otro día, un amigo me comentaba que en el trabajo, para una aplicación en Android, necesitaban enviar el contenido de una View a otra aplicaciones.
La verdad es que la funcionalidad de “Enviar a” o “Compartir con” de Android, me parece una maravilla y nunca me había puesto a ver como se hace. Así que entre esta excusa y el tener tiempo libre, esto es perfecto para empezar este blog. Si, otro blog más, por si acaso hay pocos 😉

Compartir texto es muy sencillo, este es el ejemplo que viene en la documentación de Android

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");

sendIntent.setType("text/plain");
startActivity(sendIntent);

Si lo probáis tal cual os funcionará a la primera
Compartir texto

Ahora, el compartir una imagen es algo más complicado y tenemos varias opciones:

  • Escribir el contenido en la tarjeta SD para que la aplicación que recibe el contenido pueda leerlo

  • Escribir el contenido en el directorio de tu aplicación con permiso de lectura para todo el mundo

  • Añadirlo al sistema MediaStore mediante insertImage()

  • Crear un ContentProvider y almacenarlo en el

  • Escribir el contenido en la tarjeta SD para que la aplicación que recibe el contenido pueda leerlo.

La opción que voy a elegir, es convertir la View en un archivo JPG, salvarlo en la SD y así compartir el Uri a ese fichero.

NOTA: No me esmerado mucho en el control de errores para simplificar al máximo el ejemplo.
Este es el código:

	private void comparteView(View viewShare) {
		// Creamos un bitmap con el tamaño de la vista
		Bitmap bitmap = Bitmap.createBitmap(viewShare.getWidth(),
				viewShare.getHeight(), Bitmap.Config.ARGB_8888);
		// Creamos el canvas para pintar en el bitmap
		Canvas canvas = new Canvas(bitmap);
		// Pintamos el contenido de la vista en el canvas y así en el bitmap
		viewShare.draw(canvas);

		ByteArrayOutputStream stream = new ByteArrayOutputStream();
		bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);

		Uri uriF = null;
		try {
			File f = File.createTempFile("sharedImage", ".jpg",
					getExternalCacheDir());
			f.deleteOnExit();
			FileOutputStream fo = new FileOutputStream(f);
			fo.write(stream.toByteArray());
			fo.close();

			uriF = Uri.fromFile(f);
		} catch (IOException e) {
			e.printStackTrace();
		}

		Intent sharingIntent = new Intent(Intent.ACTION_SEND);
		sharingIntent.setType("image/jpeg");

		sharingIntent.putExtra(Intent.EXTRA_STREAM, uriF);
		startActivity(sharingIntent);

	}

Entre las líneas 3 y 8, creamos un Bitmap con el tamaño adecuado a la vista. Creamos el Canvas necesario para pintar en el Bitmap y renderizamos el contenido de la vista en el canvas.
Con esto ya tenemos la imagen deseada en el objeto Bitmap.

Ahora tenemos que salvar ese objeto como un fichero jpeg, eso es la parte más sencilla y es lo que hacemos entre las líneas 15 y 20.

Como ya tenemos salvada la imagen en un archivo, nos creamos un objeto Uri a través de Uri.fromFile, este será el objeto que compartiremos con la otra aplicación.
Y ya solo nos queda crear el Itent para enviar la información pasándole nuestros datos, líneas 27 – 31.

Y este sería el resultado:

enviar a

Si queréis personalizar el titulo del cuadro de dialogo, lo podéis hacer invocando la actividad de la siguiente manera:

startActivity(Intent.createChooser(sharingIntent, "Enviar a:"));

Y eso es todo.

Anuncios

2 Responses to Compartir una View, Imagen, en Android

  1. Jano says:

    Muchas gracias tio!!

  2. David says:

    hola, gracias me sirvió de mucho…..!!!

    Felicidades…

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s