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?
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())));
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.
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.
Voici quelque chose que je me suis retrouvé:
Cependant, une petite modification à cette méthode:
La carte SD devrait être analysée à nouveau et tous les répertoires contenant des fichiers .nomedia devraient être ignorés à ce stade.
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.
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.
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).
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())));
}
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.