95 votes

L'image, enregistrée sur une carte SD, n'apparaît pas dans l'application Galerie d'Android

- Je enregistrer une image de la carte sd et il n'apparaît pas dans la Galerie de l'application jusqu'à ce que j'ai retirer la carte sd et de le retourner en arrière.

Avez-vous une idée pourquoi est-il si?

Semble que l'application Galerie a quelques cache qui n'est pas mis à jour sur fichier enregistrer...

En fait, j'ai aussi envie de s'ouvrir l'image enregistrée dans la Galerie de l'application et n'ont pas de succès avec ça
c' est ma question à propos de ce problème.

90voto

darrenp Points 872

Une solution plus simple est d'utiliser la statique de la méthode de convenance scanFile():

File imageFile = ...
MediaScannerConnection.scanFile(this, new String[] { imageFile.getPath() }, new String[] { "image/jpeg" }, null);

this est votre activité (ou quel que soit le contexte), le type mime n'est nécessaire que si vous utilisez des extensions de fichier standard et l' null est pour l'option de rappel (qui n'est pas nécessaire pour un cas simple).

66voto

ShadowGod Points 3390

Ma réponse à la question initiale et à toute autre personne pouvant avoir ce problème:

J'avais le même problème: les images de mon application enregistrées par des personnes enregistrées sur la carte SD ne figuraient pas immédiatement dans leur galerie. Après quelques recherches, j'ai trouvé cette ligne de code insérée après le code "enregistrer sur la carte sd" qui corrigeait le problème:

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

45voto

hackbod Points 55292

Le système scanne la carte SD lorsqu'elle est montée pour rechercher de nouveaux fichiers image (et autres). Si vous ajoutez un fichier par programme, vous pouvez utiliser cette classe:

http://developer.android.com/reference/android/media/MediaScannerConnection.html

13voto

Janusz Points 52607

Vous pouvez également ajouter une image à la médiathèque par intention. Consultez l'exemple de code pour voir comment cela se passe:

 ContentValues image = new ContentValues();

image.put(Images.Media.TITLE, imageTitle);
image.put(Images.Media.DISPLAY_NAME, imageDisplayName);
image.put(Images.Media.DESCRIPTION, imageDescription);
image.put(Images.Media.DATE_ADDED, dateTaken);
image.put(Images.Media.DATE_TAKEN, dateTaken);
image.put(Images.Media.DATE_MODIFIED, dateTaken);
image.put(Images.Media.MIME_TYPE, "image/png");
image.put(Images.Media.ORIENTATION, 0);

 File parent = imageFile.getParentFile();
 String path = parent.toString().toLowerCase();
 String name = parent.getName().toLowerCase();
 image.put(Images.ImageColumns.BUCKET_ID, path.hashCode());
 image.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, name);
 image.put(Images.Media.SIZE, imageFile.length());

 image.put(Images.Media.DATA, imageFile.getAbsolutePath());

 Uri result = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, image);
 

7voto

Abhishek Susarla Points 427

il y a une application dans l'émulateur qui dit - 'Outils de développement'

cliquez dessus et sélectionnez "Balayage multimédia" .. toutes les images seront numérisées

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X