2012-01-26 16 views
6

Tengo una aplicación que toma una captura de pantalla y la comparte con el intento de compartir. En lugar de guardar varias imágenes cada vez que un usuario simplemente quiere compartir la imagen. A continuación se muestra el código que he usado para las imágenes guardadas en la tarjeta SDAndroid: compartir mapa de bits no guardado en SD

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

dir = "file://" + Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "Folder/" + location; 
share.putExtra(Intent.EXTRA_STREAM, Uri.parse(dir)); 

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

Sin embargo no puedo encontrar la manera de simplemente guardar un mapa de bits como ...

share.putExtra(Intent.EXTRA_STREAM, theBitmap); 

¿Hay una manera de hacer esto sin guardando la imagen?

Gracias

Respuesta

4

Lo que hice fue guardar una imagen "Temp" en el SD/Phone y simplemente sobrescribirla cada vez.

+0

Esto es lo que hice también, pero preferiría no tener que usar la tarjeta SD (y solicitar los permisos de lectura/escritura de almacenamiento externo). Parece que habría una forma de hacer esto con el almacenamiento interno. – Suragch

+0

Esta sesión de preguntas y respuestas vale la pena leer http://stackoverflow.com/questions/9049143/android-share-intent-for-a-bitmap-is-it-possible-not-to-save-it-prior-sharing – Suragch

-1

Sí se puede enviar la imagen sin tener que guardarlo como un archivo. De sólo mirar el código que envió no tengo idea de cómo su envío de la imagen, pero se convierte el archivo con el siguiente:

   ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
       byte[] data; 
       if(yourBitmap!=null){ 
       yourBitmap.compress(CompressFormat.PNG, 75, bos); 
       }else if (yourBitmap==null){ 
        Log.w("Image going to server is null","Lost in memory"); 
       } 
       try{ 
       data = bos.toByteArray(); 

I no sabe si su envío de la imagen a otro usuario a través de su aplicación o qué pero así es como lo uso subir a un servidor. Cuando termines con la imagen, la anularás así.

   bos = null; 
       data = null; 
       yourBitmap = null; 
+0

Hola, es más un problema con share.putExtra (Intent.EXTRA_STREAM, Uri.parse (dir)) qué se supone que debe ser en lugar del Uri? – Chris

+0

Parece que no puedo hacer que esto funcione, probé compartir.putExtra (Intent.EXTRA_STREAM, datos) sin embargo, nada se adjunta y los datos no son nulos. ¿Algunas ideas? – Chris

+0

¿Cómo está usando la intención de enviar la matriz de bytes? Por lo que entiendo, no puedes poner las cosas en un intento y hacerlas automáticamente, por así decirlo. Normalmente, utilizarías la intención de iniciar otra actividad o utilizarla para iniciar un servicio. Creo que tal vez deberías buscar adjuntar un archivo a un correo electrónico o texto con un intento porque después de leer tu publicación ahora que he dormido algo, parece que necesitas crear una imagen, usar referencia en los datos y adjuntar la referencia de la intención y luego utilizar startActivity. Estoy fuera de la puerta en este momento, así que espero que la ayuda –

1

Trate de usar éste:

Intent shareIntent = new Intent(); 
shareIntent.setAction(Intent.ACTION_SEND); 
Uri uri = Uri.parse("android.resource://com.your.app/drawable/" + yourimage); 
shareIntent.putExtra(Intent.EXTRA_STREAM, uri); 
shareIntent.putExtra(Intent.EXTRA_TEXT, shareImage); 
shareIntent.setType("image/*"); 
startActivity(Intent.createChooser(shareIntent, "Send your image")); 

Este código funciona bien para mí enviar dibujables que utilizo en mi aplicación. No hay imágenes guardadas en la tarjeta sd. El único problema es que no funciona con algunas aplicaciones sociales:/

+0

simplemente toma los artículos extraíbles de su aplicación, espero que esto ayude. –

+0

Pero esto no ayuda con las nuevas imágenes que cree con su aplicación. – Suragch

Cuestiones relacionadas