Cómo guardar la imagen en la galería de Android

Intento guardar la imagen en WathsappIMG pero cuando voy a la galería de imágenes de Android no veo la imagen y la imagen en el directorio se puede ver desde ES File Explorer.

OutputStream output; // Find the SD Card path File filepath = Environment.getExternalStorageDirectory(); // Create a new folder in SD Card File dir = new File(filepath.getAbsolutePath() + "/WhatSappIMG/"); dir.mkdirs(); // Retrieve the image from the res folder BitmapDrawable drawable = (BitmapDrawable) principal.getDrawable(); Bitmap bitmap1 = drawable.getBitmap(); // Create a name for the saved image File file = new File(dir, "Wallpaper.jpg" ); try { output = new FileOutputStream(file); // Compress into png format image from 0% - 100% bitmap1.compress(Bitmap.CompressFormat.JPEG, 100, output); output.flush(); output.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } 

    la galería no muestra (necesariamente) los archivos del almacenamiento externo.

    este es un error común.

    la galería muestra imágenes almacenadas en el proveedor de la tienda multimedia

    Puede usar este método para almacenar archivos de imágenes en el proveedor de la tienda de medios:

     public static void addImageToGallery(final String filePath, final Context context) { ContentValues values = new ContentValues(); values.put(Images.Media.DATE_TAKEN, System.currentTimeMillis()); values.put(Images.Media.MIME_TYPE, "image/jpeg"); values.put(MediaStore.MediaColumns.DATA, filePath); context.getContentResolver().insert(Images.Media.EXTERNAL_CONTENT_URI, values); } 

    aquí es lo que debe ingresar, cuando esté a punto de guardar la imagen en la Galería

     MediaStore.Images.Media.insertImage(getContentResolver(), yourBitmap, yourTitle , yourDescription); 

    Ese código agregará la imagen al final de la Galería. así que por favor, revisen su imagen de Galería, para estar seguros

    Intenta agregar esto:

    MediaStore.Images.Media.insertImage(getContentResolver(), yourBitmap, yourTitle , yourDescription);

    Complete sus datos para su Bitmap, yourTitle y yourDescription, o simplemente déjelo como "" .

    Debe agregar una clase MediaScannerConnection a su función de guardar la imagen en la galería. Esta clase busca nuevos archivos y carpetas en la galería conectados con su aplicación. Agregue la siguiente clase para escanear los archivos de imagen recién guardados o el nuevo directorio de imágenes agregado a la galería o descargue el código fuente

      MediaScannerConnection.scanFile(this, new String[]{file.toString()}, null, new MediaScannerConnection.OnScanCompletedListener() { public void onScanCompleted(String path, Uri uri) { Log.i("ExternalStorage", "Scanned " + path + ":"); Log.i("ExternalStorage", "-> uri=" + uri); } }); 

    Lee mas

    Deberías cambiar esta pieza de código

     try { output = new FileOutputStream(file); // Compress into png format image from 0% - 100% bitmap1.compress(Bitmap.CompressFormat.JPEG, 100, output); output.flush(); output.close(); String url = Images.Media.insertImage(getContentResolver(), bitmap1, "Wallpaper.jpg", null); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } 

    Para los becarios de Xamarin:

     public static void SaveToTheGalley(this string filePath, Context context) { var values = new ContentValues(); values.Put(MediaStore.Images.Media.InterfaceConsts.DateTaken, Java.Lang.JavaSystem.CurrentTimeMillis()); values.Put(MediaStore.Images.Media.InterfaceConsts.MimeType, "image/jpeg"); values.Put(MediaStore.MediaColumns.Data, filePath); context.ContentResolver.Insert(MediaStore.Images.Media.ExternalContentUri, values); } 

    Y no te olvides del permiso android.permission.WRITE_EXTERNAL_STORAGE .