Como compatir archivos multimedia en Android

Anteriormente vimos como compartir texto entre aplicaciones, hoy veremos como compartir audio, videos e imágenes. Hay varias formas, las que pueden ver en la documentación oficial . Veremos un caso común para compartir una imagen, utilizando la opción de almacenar dicha imagen en la sd para que otras aplicaciones puedan acceder a ella.

En este ejemplo tenemos un ImageView con una imagen y deseamos que al presionar sobre la misma nos permita compartirla.

Aquí está el código para el evento del touch:


@Override
 public boolean onTouch(View v, MotionEvent event) {
 // TODO Auto-generated method stub

 if(v.getId()==findViewById(R.id.imageView).getId()){
      if(MotionEvent.ACTION_DOWN==event.getAction()){

          guardarEnSd();

          File sdCardDirectory = Environment.getExternalStorageDirectory();
          File image = new File(sdCardDirectory.getAbsolutePath() +           "/Android/data/com.temperoni.visordememes/","shared.jpg");
          Uri uri = Uri.fromFile(image);

          Intent shareIntent = new Intent();
          shareIntent.setAction(Intent.ACTION_SEND);
          shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
          shareIntent.setType("image/jpeg");
          startActivity(Intent.createChooser(shareIntent, "Compartir meme a"));

      }

   }

    return true;
 }

Y el método guardarEnSd:

private void guardarEnSd(){        

        BitmapDrawable drawable = (BitmapDrawable) full.getDrawable();
        Bitmap bitmap = drawable.getBitmap();

        File sdCardDirectory = Environment.getExternalStorageDirectory();

        File dir = new File (sdCardDirectory.getAbsolutePath() + "/Android/data/com.temperoni.visordememes");
        dir.mkdirs();

        File image = new File(dir, "shared.jpg");

        // Encode the file as a PNG image.
        FileOutputStream outStream = null;
        try {

            outStream = new FileOutputStream(image);
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
        /* 100 para mantener la calidad de la imagen */

            outStream.flush();
            outStream.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

Primero creamos un Bitmap a partir de nuestro ImageView(full), luego creamos un objeto de tipo file y le pasamos la ruta del directorio creado y el nombre del mismo como parámetros. Luego gracias a la clase Bitmap creamos la imagen y la guardamos en la sd.
Para compartir la imagen, llamamos a este método encargado de guardar la imagen, creamos un File con la ruta del archivo creado recientemente y finalmente hacemos uso de la clase Uri para obtener el Uri del archivo, el cual pasaremos como parámetro al intent que creamos para compartir. Al mismo se le deben indicar el tipo de archivo a compartir. Inicimos la actividad y listo, el resto queda en manos del usuario.
Si quisieramos compartir videos o audio, el procedimiento es el mismo, necesitamos la uri del archivo a compartir y se la pasamos a la actividad para que las aplicación que la reciba pueda acceder al archivo y se encargue de capturarlo.


5 thoughts on “Como compatir archivos multimedia en Android

  1. Hola, disculpa, seguí tu tutorial para cargar Imagenes desde una URL a un ImageView pero al cargar la app al teléfono se detiene, yo uso android studio y no sé si algo haya cambiado en ese aspecto, por que ya intenté de varias formas y con varios tutoriales y con todos me pasa lo mismo, pero cuando eh echo otras apps como consultas a mysql por ejemplo, corren sin ningun problema, no se si tendras alguna idea o algo que pudiera servirme xD.

    Saludos.

  2. Me podrias explicar lo mismo para audio, yo tengo esto:
    public void compartir(View view) {
    Intent intentCompartir = new Intent(Intent.ACTION_SEND);
    intentCompartir.setType(“audio/mpeg3″);
    intentCompartir.putExtra(Intent.EXTRA_STREAM, Uri.parse(“file//:sdcard/Music/MisAudios/cansino.mp3″));
    startActivity(Intent.createChooser(intentCompartir, “Compartir audio”));
    }
    y claro al no guardarse en la sd me da error

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