una studio seleccionar reciclaje programacion por pasar papelera móviles manejo imagen galeria fotos esta enviar donde desarrollo curso como celular camara aplicaciones album android

studio - manual de programacion android pdf



¿Cómo puedo actualizar la Galería después de insertar una imagen en Android? (4)

He añadido un insertado en la Galería utilizando la API de Android como sigue:

Images.Media.insertImage (ctx.getContentResolver (), "scard / test.jpg", "Hello", "description");

En realidad, la imagen a la que pasé su ruta completa (scard / test.jpg) ya se insertó correctamente en la base de datos, pero cuando abre la galería, no podrá verla a menos que apague / encienda el dispositivo o monte / desmonte el dispositivo memoria.

¿Hay alguna forma de refrescar la galería a pedido?

Gracias

Bassel Kh.


Encontré este problema recientemente, probé la solución de @Samuh, pero no funciona perfectamente hasta que encontré la solución en el ejemplo de Google :

// Tell the media scanner about the new file so that it is // immediately available to the user. 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); } });

Lo intenté y trabajé a la perfección.

O, de manera similar, puede querer echar un vistazo a la referencia de la clase MediaScanner y alguien en hizo esta pregunta antes: la imagen, guardada en sdcard, no aparece en la aplicación Gallery de Android


La solución utilizando el escáner de medios (sendBroadcast). Pero, probablemente, en tarjetas SD con muchas fotos y datos, esta operación debería alcanzar un alto costo de procesamiento.

Hay otra solución, después de guardar su archivo multimedia en la galería, debe notificar a la base de datos de la galería que se insertó otro archivo. Eso se puede hacer así:

private void addImageGallery( File file ) { ContentValues values = new ContentValues(); values.put(MediaStore.Images.Media.DATA, file.getAbsolutePath()); values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); // or image/png getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); }

Este código no guarda su archivo multimedia en la galería, solo guarda la información sobre un archivo nuevo en la base de datos de la galería. Usted debe almacenar el archivo real antes.

Esta solución es más rápida porque la galería no se volverá a escanear completamente. Pero no es tan confiable porque toda la información sobre el archivo se agregó manualmente.


Puedes usar esto para actualizar la Galería de Android:

public void refreshAndroidGallery(Uri fileUri) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Intent mediaScanIntent = new Intent( Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); mediaScanIntent.setData(fileUri); mContext.sendBroadcast(mediaScanIntent); } else { mContext.sendBroadcast(new Intent( Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()))); } }


static public boolean resetExternalStorageMedia(Context context) { if (Environment.isExternalStorageEmulated()) return (false); Uri uri = Uri.parse("file://" + Environment.getExternalStorageDirectory()); Intent intent = new Intent(Intent.ACTION_MEDIA_MOUNTED, uri); context.sendBroadcast(intent); return (true); } static public void notifyMediaScannerService(Context context, String path) { MediaScannerConnection.scanFile(context, new String[] { path }, null, new MediaScannerConnection.OnScanCompletedListener() { public void onScanCompleted(String path, Uri uri) { Log.i("ExternalStorage", "Scanned " + path + ":"); Log.i("ExternalStorage", "-> uri=" + uri); } }); }