software para mis instalar guardadas galería galeria fotos español borra actualizo activar abrir android gallery mediastore

para - Android: Actualizar la galería después de guardar nuevas imágenes



mis fotos guardadas en galeria (8)

Debajo del código funcionan todos los dispositivos para actualizar la galería después de guardar la imagen.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); File f1 = new File("file://" + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)); Uri contentUri = Uri.fromFile(f1); mediaScanIntent.setData(contentUri); sendBroadcast(mediaScanIntent); } else { sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()))); } sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File("your image path"))));

Así que en mi aplicación, en un momento guardo un montón de imágenes en una carpeta temporal, y quiero que aparezcan inmediatamente en la Galería. Fuera de un reinicio, lo hacen, pero de lo contrario no lo hacen.

He intentado usar el método sendBroadcast:

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));

Pero me sale un error de permiso:

E/AndroidRuntime( 2628): java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.MEDIA_MOUNTED from pid=2628, uid=10068

¿Podría faltar un permiso en mi AndroidManifest o es que ya no es compatible? Gracias


El código provisto por Petrus en otra respuesta me funciona en Kitkat (4.4):

MediaScannerConnection.scanFile(this, new String[] { Environment.getExternalStorageDirectory().toString() }, null, new MediaScannerConnection.OnScanCompletedListener() { /* * (non-Javadoc) * @see android.media.MediaScannerConnection.OnScanCompletedListener#onScanCompleted(java.lang.String, android.net.Uri) */ public void onScanCompleted(String path, Uri uri) { Log.i("ExternalStorage", "Scanned " + path + ":"); Log.i("ExternalStorage", "-> uri=" + uri); } });


Implemente MediaScannerConnectionClient y agregue el siguiente código. Funciona perfectamente en 4.4 :)

MediaScannerConnection conn; public void startScan(String url) { imagepath = url; if (conn != null) conn.disconnect(); conn = new MediaScannerConnection(activity.this, activity.this); conn.connect(); } @Override public void onMediaScannerConnected() { try { conn.scanFile(imagepath, getMimeType(imagepath)); } catch (java.lang.IllegalStateException e) { //Do something } } @Override public void onScanCompleted(String path, Uri uri) { conn.disconnect(); }


Intenté Environment.getExternalStorageDirectory().toString() , pero no encontré mi carpeta personalizada.

Solo quería compartir mi experiencia para resolver este problema.

Al final, configuré MediaScannerConnection para escanear un archivo a la vez y ahora faltaba la carpeta que contenía esas imágenes. Cada vez que descargo cada imagen, llamo MediaScannerConnection y la ruta del archivo como Uri en lugar de la carpeta en sí.

Además, muchas personas preguntaron por qué sendBroadcast dejó de funcionar en kitkat y la respuesta es que sendBroadcast fue maltratado y llamado muchas veces y causando que el sistema agotara la batería o disminuyera la velocidad, por lo que eliminaron la llamada directa para evitar el abuso, lo cual tiene sentido. Esperaba usar la solución anterior para la carpeta que contiene todas las imágenes, pero no funcionó en la carpeta. Esperaba que la carpeta de búsqueda expusiera el resto de los archivos dentro de la carpeta personalizada, pero no lo hizo en mi caso. Espero encontrar una mejor respuesta en el futuro ...

Aquí hay un fragmento de mi código.

MediaScannerConnection.scanFile(ApplicationContext.context, new String[] { imageFile.getPath() }, null, new MediaScannerConnection.OnScanCompletedListener() { @Override public void onScanCompleted(String path, Uri uri) { Log.i(TAG, "Scanned " + path); } });


Pruebe este: después de guardar su archivo en la carpeta, escriba el código a continuación

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File("your image path"))));


Sé que es tarde pero intente esto puede trabajar en todas las versiones:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Intent mediaScanIntent = new Intent( Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); Uri contentUri = Uri.fromFile(out); //out is your file you saved/deleted/moved/copied mediaScanIntent.setData(contentUri); this.sendBroadcast(mediaScanIntent); } else { sendBroadcast(new Intent( Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory()))); }


Use MediaScannerConnection en lugar de SendBroadcast ..

MediaScannerConnection.MediaScannerConnectionClient( { @Override public void onScanCompleted(String path, Uri uri) { if (path.equals(**your filename**.getAbsolutePath())) { Log.i("Scan Status", "Completed"); Log.i("uri: ",uri.toString()); conn.disconnect(); } } @Override public void onMediaScannerConnected() { // TODO Auto-generated method stub conn.scanFile(**your file name**.getAbsolutePath(),null); } }); conn.connect();


FileOutputStream out = new FileOutputStream(file); finalBitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); out.flush(); //Gallery Refresh Code MediaScannerConnection.scanFile(getActivity(), new String[] { Environment.getExternalStorageDirectory().toString() }, null, new MediaScannerConnection.OnScanCompletedListener() { /* * (non-Javadoc) * @see android.media.MediaScannerConnection.OnScanCompletedListener#onScanCompleted(java.lang.String, android.net.Uri) */ public void onScanCompleted(String path, Uri uri) { Log.i("ExternalStorage", "Scanned " + path + ":"); Log.i("ExternalStorage", "-> uri=" + uri); } }); out.close();