PDA

Ver la Versión Completa : Problema con intent para compartir imagenes


sadelta
06/02/14, 11:31:23
Hola soy novato en programación estudio java y android, y estoy haciendo un pequeño programa es un visor de fotos, compuesto por unas cuantas imágenes y tres botones,
derecha izquierda y compartir.
Bien el problema es el boton compartir tengo las imágenes en un array

las imágenes se visualizan en un imageView,y las tengo listadas en un array, y aquí viene el problema como llamo a la imagen que esta en ese momento en el imageView.
hay ejemplos que dicen como compartir una imagen pero desde un directorio en concreto y una imagen en concreto y eso no me sirve, otra cosa e visto que hay que poner una Uri y no se que poner

ImageView foto;
int[] fotoId = {R.drawable.rajo,R.drawable.f1,
R.drawable.f2,R.drawable.f3,
R.drawable.f4,R.drawable.f5};
int i = 0;
int total;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//////////////////////////////////////
Button derecha = (Button)findViewById(R.id.btnDe);
Button izquierda = (Button)findViewById(R.id.btnIz);
Button compartir = (Button)findViewById(R.id.btnCom);

derecha.setOnClickListener(this);
izquierda.setOnClickListener(this);
compartir.setOnClickListener(this);

foto = (ImageView) findViewById(R.id.imageView1);
total = fotoId.length;

// Esta es la parte donde estoy atascado
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND); //esto es la accion enviar
shareIntent.putExtra(Intent.EXTRA_STREAM,uri);//aqui no se cual es la uri
shareIntent.setType("image/jpeg"); //esto es es tipo que quiero compartir
startActivity(Intent.createChooser(shareIntent, (CharSequence) getResources()))


Os agradecería que echarais una mano a este novato, gracias

kriogeN
06/02/14, 14:13:21
Tienes que coger la imagen que tienes en el ImageView, convertirla a Bitmap, guardarla en disco y luego usar la ruta como URI, por partes:

Bitmap imagen = ((BitmapDrawable) foto.getDrawable()).getBitmap();
FileOutputStream fichero = new FileOutputStream(Environment.getExternalStorageDir ectory() + "/imagen.jpg");
imagen.compress(Bitmap.CompressFormat.JPEG, 80, fichero);
Uri uri = Uri.parse(Environment.getExternalStorageDirectory( ) + "/imagen.jpg");

Ahora sobre el código de arriba, tendrás que poner IOException en algunos sitios y en la línea del "Uri.parse...." en algunas aplicaciones con las que compartas con algunos móviles te fallará, es debido a que algunas aplicaciones requieren que la Uri tenga "file://" al principio (otras no es necesario), por ejemplo creo que con Facebook no hace falta y con WhatsApp si, o al revés, ahora mismo no lo recuerdo bien lo hice hace algunos meses. Y en algunos móviles el Environment.getExternalStorageDirectory() incluye el "file://" y en otros no.

Yo al final lo solucioné comparando si Environment.getExternalStorageDirectory() no comenzaba con "file://", y en ese caso lo añado por delante, y si lo incluye no añado nada.

sadelta
06/02/14, 14:45:40
Muchas gracias kriogeN probare tu ejemplo haver que tal resulta.

sadelta
06/02/14, 16:50:26
Pues sigo igual que estaba no me envia la foto que esta en ese momento en el visor


Intent share = new Intent(Intent.ACTION_SEND);
share.setType("image/*");

share.putExtra(Intent.EXTRA_STREAM,
Uri.parse("android.resource://com.std.pruebashare/drawable/" + Integer.toString(R.drawable.f1)));


startActivity(Intent.createChooser(share, "Share Image"));

este codigo funciona pero esta limitado a la imagen que tu le digas, por eso tampoco me sirve, tiene que ser la que este visualizandose en ese momento en el imageview ,
gracias de todas formas

jtsamper
06/02/14, 19:34:37
Supongo que usaras
int i = 0;
para saber la posicion de ese array de int[] no??

pues
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("image/*");
share.putExtra(Intent.EXTRA_STREAM,
Uri.parse("android.resource://com.std.pruebashare/drawable/" + Integer.toString( fotoId[i] )));
startActivity(Intent.createChooser(share, "Share Image"));

Esto deberia enviarte la foto que tienes en ese momento.

Espero que te sirva

sadelta
06/02/14, 19:55:01
muchas gracias jtsamper es lo que estaba buscando, llevo poco estudiando java, 3 meses y 2 semanas en android ósea me queda muchísimo que estudiar,
bueno gracias de nuevo , aun me queda mucho que aprender.



Nota: comparte las fotos bien, menos en facebook que no la envia alguna idea.
:aplausos::ok:

LFRCORP
14/04/15, 02:20:06
Buen día Sadelta.

Podrías compartirme tu código final por favor es que estoy buscando algo muy similar a lo que tu has logrado programar, no dudando de tu invaluable apoyo de antemano; Gracias.

Saludos cordiales...

http://luisfloresr.blogspot.mx/