web-dev-qa-db-fra.com

Android - .nomedia ne fonctionne pas pour les images

J'ai des images, qui sont lues à partir de la carte SD uniquement par une application particulière, donc je veux le cacher de la galerie d'images. J'ai mis un fichier .nomedia dedans, mais ce fichier est ignoré, les images sont toujours affichées dans la Galerie. Je l'ai mis avec "." au début. Ne fonctionne toujours pas. Des idées?

22
Waypoint

Je suppose que vous utilisez Android 4.0, comme .nomedia fonctionnait correctement jusque-là. L'AOSP rapport de bogue pour le problème explique:

MediaScanner on Android 4.0 n'oublie pas les fichiers déjà indexés lorsqu'il rencontre un .nomedia fichier, mais il l'honore s'il est présent lors de la première passe. La solution consiste donc simplement à renommer le répertoire. Bien sûr, vous pouvez modifier le nom après la prochaine numérisation, si vous le souhaitez.

Mise à jour : Je suppose que la solution complète serait de forcer réellement une analyse des médias après avoir renommé le répertoire. Je ne l'ai pas essayé, mais quelque chose comme ça devrait faire l'affaire:

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

Eh bien ... j'avoue que je ne fais que deviner, mais comme il a obtenu un +1 dans le commentaire, je vais lui donner un tourbillon comme réponse. Comme il s'agit de votre propre application, changez l'extension du fichier image par quelque chose de totalement unique ".myimagefile" par exemple, et voyez si cela le cache à Android. En attendant, vous savez quels fichiers charger dans votre propre application et comment les enregistrer.

6
Yevgeny Simkin

Le bogue .nomedia est correct et vous POUVEZ l'ajouter à un dossier d'images préexistant.

Vous pouvez forcer la galerie à réindexer après avoir créé le fichier .nomedia en renommant le dossier, exécuter la galerie (le "dossier caché devrait maintenant être manquant) et renommer le dossier selon ce que vous voulez. Il doit rester caché.

Je viens de recommencer pour m'assurer que cela fonctionne sur mon téléphone. Android 4.0.4.

5
Isamu

Voici quelque chose que je me suis retrouvé:

http://www.transformerforums.com/forum/asus-transformer-faq/17765-solved-nomedia-doesnt-work-under-honeycomb-ics.html

Cependant, une petite modification à cette méthode:

  1. Téléchargez et installez l'application SDRescan
  2. Effacer les données de l'application Galerie
  3. Effacer les données de l'application Media Storage
  4. Ouvrez l'application SDRescan téléchargée à l'étape 1

La carte SD devrait être analysée à nouveau et tous les répertoires contenant des fichiers .nomedia devraient être ignorés à ce stade.

4
devo1929

Dans ma carte mémoire, j'ai des milliers de photos qui submergent le scanner multimédia. Puis dans le dossier racine de ma carte mémoire, renommé de "RootFolder" en ".RootFolder"

Est devenu le répertoire caché et n'utilise plus de .nomedia

Essaye ça.

2
Sergio Cabral

Avec Media Storage 4.1.1 sur mon Samsung Galaxy Note 2, aucune des astuces données ci-dessus ne fonctionne pleinement, dans ce sens: les répertoires contenant des fichiers .nomedia sont toujours analysés, ce qui peut vider la batterie beaucoup (bien que le résultat soit ignoré dans le galerie), ainsi que des répertoires dont le nom commence par un '.' sont toujours scannés :-(
J'ai eu recours à l'application "Media Scanner Root", qui permet de désactiver complètement le scanner de merde. Ceci est apparemment réalisé par quelque chose comme

pm désactiver com.Android.providers.media/com.Android.providers.media.MediaScannerReceiver

BTW, la désactivation/gel de l'application Media Storage elle-même a le mauvais effet que la sélection et la liaison des sonneries et des notifications ne fonctionnent plus (quelle merveilleuse conception), mais en ne désactivant que son composant scanner, on peut toujours utiliser, par exemple, l'explorateur de fichiers ES pour sélectionner les sons.

1
dvo

Le .nomedia le fichier est préventif et non curatif (dans Android 4.0), et c'est un bogue. Si vous aviez un .nomedia le fichier et les images s'y trouvent déjà, la Galerie recherchera toujours les images.

Vous devez créer votre .nomedia fichier avant d'y mettre des images.

Modifier : tous les dossiers commençant par un point ne sont pas analysés (car masqués).

1
shkschneider

La galerie n'est pas mise à jour si souvent et certaines vignettes sont toujours affichées. Pour cela, vous devez redémarrer le téléphone ou mettre à jour la galerie par programme, en suivant le code.

    /**
 * This method is must to reflect changes on gallery, if some file is
 * deleted or moved, <b> no updation is shown on gallery till phone is
 * rebooted </b> or <i>till this method UpdateGallery(Activity activity) is
 * called</i> UpdateGallery
 */
public static void UpdateGallery(Activity activity) {
    activity.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri
            .parse("file://" + Environment.getExternalStorageDirectory())));
}
1
taran mahal

Vous pourriez envisager d'utiliser l'APK Expansion Zip Library (nécessite l'API niveau 5 ou supérieur) pour lire les fichiers que vous aurez installés sur la carte SD dans le cadre d'une archive Zip. Une description de cette bibliothèque peut être trouvée ici:

http://developer.Android.com/guide/market/expansion-files.html#ZipLib

Vraisemblablement, les fichiers stockés dans une archive Zip sur votre carte SD ne seront pas affichés par la Galerie.

De plus, si vous avez des images à partir desquelles votre application lit (mais n'écrit pas sur) la carte SD, et cela ne devrait être disponible que pour votre propre application, et cela pourrait être fourni lorsque votre application est installée ou mise à jour , il peut être judicieux de profiter d'une nouvelle fonctionnalité Google Play pour les intégrer en tant que partie de votre application lorsqu'elle est installée.

Je suppose que vous stockez vos images sur la carte SD car elles sont trop grandes pour tenir dans votre fichier APK (compte tenu de sa taille limite de 50 Mo, qui est encore plus petite que celle de certains appareils en raison de problèmes de mise en mémoire tampon).

Si c'est le cas, vous pourriez considérer que Google Play, à partir du 05/03/2012, prend en charge la pièce jointe (à votre application) d'un maximum de deux "fichiers d'extension" de 2 gigaoctets chacun. L'APK a toujours un maximum de 50 Mo, mais les fichiers d'extension augmentent le stockage total disponible à plus de 4 Go. Ces fichiers d'extension sont servis pour vous par Google, et ils sont conservés dans un dossier de carte SD spécifique qui est spécifique à votre application, et sont accessibles à l'aide d'une API fournie par la bibliothèque de téléchargement (nécessite l'API niveau 5 ou supérieur).

Voici l'annonce de Google de ce changement:

http://Android-developers.blogspot.in/2012/03/Android-apps-break-50mb-barrier.html

Et voici une description détaillée de l'installation:

http://developer.Android.com/guide/market/expansion-files.html

Notez que bien que cette fonctionnalité soit nouvelle, les bibliothèques ont été fournies avec le Android SDK pour une utilisation avec les niveaux d'API antérieurs. Par exemple, sur mon installation, je trouve les versions d'API-8 ici:

<Android SDK base folder>\extras\google\play_apk_expansion\

Ce même dossier comprend la bibliothèque Zip d'extension APK susmentionnée dans son sous-dossier Zip_file.

Je n'ai pas encore personnellement utilisé cette installation moi-même, et je décris donc cela uniquement sur la base des références citées.

0
Carl