Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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

Pero no quiero guardar la imagen … ¿es posible ..

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.]

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.