Imagen de la parte del androide en ImageView sin guardar en la tarjeta SD
Quiero compartir la imagen en la visión de la imagen. Pero no quiero ahorrar a SDcard. Pero cuando uso Intent to share i used code
Intent share = new Intent(Intent.ACTION_SEND); share.setType("image/jpeg"); share.putExtra(Intent.EXTRA_STREAM,Uri.parse(path)); startActivity(Intent.createChooser(share, "Share Image"));
Aquí Ruta de ubicación especificada de la imagen en sdcard
- Lona: intentando usar un mapa de bits reciclado de Android
- ¿Cómo configurar la imagen de una imagen de una cadena?
- Java.lang.OutOfMemoryError en almacenar imágenes en sqlite db
- Cómo solucionar problemas de java.lang.OutOfMemoryError en Android
- Android usando Renderscript para efectos de desenfoque falla causas A / libc: Fatal señal 7 (SIGBUS), código 2, error addr 0x9e6fa000 en tid 482 (AsyncTask # 1)
Pero no quiero guardar la imagen … ¿es posible ..
- El mapa de bits de la vista no se muestra en Android
- Aplicar colorMatrix colorFilter en parte de imageView con una máscara
- Dibujo de mapas de bits reflejados en android
- ¿Es necesario llamar a Bitmap.recycle () después de usarlo (en Android)?
- Resize Drawable en Android
3 Solutions collect form web for “Imagen de la parte del androide en ImageView sin guardar en la tarjeta SD”
También puede compartirlo como URI del proveedor de contenido de Media Gallery (si la imagen ya está en el teléfono o, si procede de la web, podría compartir la URL aunque no tenga el mismo efecto).
Pero si vinieron de la web y que directamente decodificado a Bitmap y ahora quieren compartirlo como una imagen adecuada, sí, realmente necesita el archivo!
El método recomendado para compartir archivos con otras aplicaciones es con un ContentProvider llamado FileProvider . La documentación es bastante buena, pero algunas partes son un poco complicadas. Aquí hay un resumen.
Configurar FileProvider en el manifiesto
<manifest> ... <application> ... <provider android:name="android.support.v4.content.FileProvider" android:authorities="com.example.myapp.fileprovider" android:grantUriPermissions="true" android:exported="false"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/filepaths" /> </provider> ... </application> </manifest>
Reemplace com.example.myapp
con el nombre del paquete de la aplicación.
Crear res / xml / filepaths.xml
<?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <cache-path name="shared_images" path="images/"/> </paths>
Esto le dice al FileProvider dónde obtener los archivos para compartir (usando el directorio de caché en este caso).
Guardar la imagen en almacenamiento interno
// save bitmap to cache directory try { File cachePath = new File(context.getCacheDir(), "images"); cachePath.mkdirs(); // don't forget to make the directory FileOutputStream stream = new FileOutputStream(cachePath + "/image.png"); // overwrites this image every time bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); stream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
Compartir la imagen
File imagePath = new File(context.getCacheDir(), "images"); File newFile = new File(imagePath, "image.png"); Uri contentUri = FileProvider.getUriForFile(context, "com.example.app.fileprovider", newFile); if (contentUri != null) { Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // temp permission for receiving app to read this file shareIntent.setDataAndType(contentUri, getContentResolver().getType(contentUri)); shareIntent.putExtra(Intent.EXTRA_STREAM, contentUri); startActivity(Intent.createChooser(shareIntent, "Choose an app")); }
Otras lecturas
- FileProvider
- Opciones de almacenamiento – Almacenamiento interno
- Cómo compartir archivos
- Guardar archivos
Yo era capaz de hacer esto:
File file = new File( getCacheDir(), "screenshot.png"); ... file.setReadable(true, false); Uri uri = Uri.fromFile(file); ... intent.putExtra(Intent.EXTRA_STREAM, uri);
De esta manera guardo el archivo en mi propia carpeta de caché, así que no estoy engañando con ninguna carpeta pública o dependiendo de la tarjeta SD que está presente.
También, esta manera él consigue suprimido automáticamente si el usuario quita mi app, pero también utilicé startActivityForResult / onActivityResult para suprimir el archivo y fijar su carpeta de nuevo a privado cuando la parte es acabada.
(Personalmente esperaba encontrar una manera de compartir un bitstream y evitar el paso de crear un archivo enteramente, pero no creo que eso sea posible).
[EDIT: He descubierto que esto no funciona en 2.3.6 donde el archivo DEBE estar en el archivo: /// mnt / sdcard.]
- ¿Cuándo debo reciclar un mapa de bits usando LRUCache?
- BitmapFactory.decodeFile devuelve una imagen nula incluso existe
- Android: cómo programar ronda sólo esquinas superiores de un mapa de bits?
- Obtenga el tamaño medido y la posición del mapa de bits en el lienzo después de la transformación 2D
- Android: ¿Diferencia entre canvas.drawBitmap y BitmapDrawable.draw?
- Android código de bits de código nativo - problema de enlace
- Extraños resultados al comprimir lote de imágenes con libjpegturbo
- Redondeando solamente UNA esquina de la imagen - no todas las cuatro
- Cómo convertir vistas a mapas de bits?
- Codificar y decodificar objeto de mapa de bits en cadena base64 en Android
- Escala de un mapa de bits para encajar en un lienzo
- Android: ¿Cómo mostrar un mapa de bits en un WebView?