Android.- nomedia ne fonctionne pas pour les images
j'ai des images, qui sont lues à partir de sdcard seulement par application particulière donc je veux le cacher de la galerie d'image. J'ai mis .la nomédie fichier, mais ce fichier est ignoré, les images sont toujours à l'affiche dans la Galerie. Je l'ai mis avec "."au début. Toujours pas de travail. Des idées?
9 réponses
je suppose que vous utilisez Android 4.0, comme .nomedia
fonctionnait correctement jusque-là. L'AFST rapport de bogue pour le problème explique:
MediaScanner
sur Android 4.0 ne parvient pas à oublier les fichiers déjà indexés quand il rencontre un .nomedia
fichier, mais il l'honore s'il est présent sur la première passe. Donc la solution est simplement de renommer le répertoire. Bien sûr, vous pouvez changer le nom après le prochain scan, si vous voulez.
mise à Jour: I supposons que la solution complète serait de forcer un scan Multimédia après avoir renommé le répertoire. Je n'ai pas essayé, mais quelque chose comme cela devrait faire l'affaire:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" +
Environment.getExternalStorageDirectory())));
Bien... J'admets que je ne fais que deviner, mais comme il a obtenu un +1 dans le commentaire, je vais lui donner un tourbillon comme une réponse. Comme il s'agit de votre propre application, changez l'extension du fichier image en quelque chose de totalement unique ".myimagefile " par exemple, et voir si cela le cache D'Android. En attendant, vous savez quels fichiers à charger dans votre propre application, et comment les enregistrer.
le .nomedia bug a raison et vous pouvez l'ajouter à un dossier d'image préexistant.
vous pouvez forcer la galerie à ré-indexer après avoir créé le .nomedia file en renommant le dossier, exécutez gallery (le " dossier caché devrait maintenant être manquant), et renommez le dossier de nouveau à ce que vous voulez. Il devrait rester caché.
je viens de le refaire pour m'assurer que ça marche sur mon téléphone. Android 4.0.4.
Voici ce que j'ai trouvé moi-même:
Toutefois, un peu de modification à cette méthode:
- Télécharger et installer SDRescan app
- Effacer les données pour l'application Galerie
- Effacer les données pour les Supports de Stockage app
- ouvrir l'application sdrescan téléchargée depuis step 1
SDCard doit être re-scanné et tous les répertoires contenant .les fichiers nomedia devraient être ignorés à ce stade.
.nomedia
le fichier est préventif, pas curatif (dans Android 4.0), et c'est un bug.
Si vous aviez un .nomedia
le fichier et les images y sont déjà, Gallery va encore chercher des images.
vous devez créer votre .nomedia
le fichier avant putting images in it.
Modifier: tous les dossiers commençant par un point ne sont pas analysés (car caché).
avec le stockage des médias 4.1.1 sur ma Samsung Galaxy Note 2, aucun des trucs donnés ci-dessus ne fonctionne complètement, dans ce sens: des répertoires contenant .les fichiers nomedia sont encore scannés, ce qui peut drainer beaucoup la batterie (bien que le résultat soit ignoré dans la galerie), et aussi les répertoires avec des noms commençant par un '."sont analysés :-(
J'ai eu recours à L'application "Media Scanner Root", qui permet de désactiver complètement le scanner de médias merdique. Cela est apparemment réalisé par quelque chose comme
pm disable com.android.providers.media/com.android.providers.media.MediaScannerReceiver
BTW, désactiver/geler l'application de stockage de médias lui-même a le mauvais effet que la sélection et la liaison de sonneries et notifications ne fonctionne plus (quelle conception merveilleuse), mais quand seulement désactiver son composant de scanner, on peut encore utiliser, par exemple, L'Explorateur de fichiers ES pour sélectionner des tons.
La Galerie N'est pas mise à jour aussi souvent et certaines vignettes sont toujours sur la vue. Pour cela u besoin de redémarrer le téléphone ou la galerie de mise à jour programmatique, 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())));
}
dans ma carte mémoire j'ai des milliers de photos qui submergent le media-scanner. Puis dans le dossier racine de ma carte mémoire, renommé depuis "RootFolder" pour ".RootFolder"
est devenu le répertoire caché et n'utilise plus .la nomédie
Essayez ceci.
vous pourriez envisager d'utiliser la bibliothèque Zip D'extension APK (nécessite le niveau D'API 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é ici:
http://developer.android.com/guide/market/expansion-files.html#ZipLib
probablement, les fichiers stockés dans une archive ZIP sur votre carte SD ne seront pas affichés par la galerie.
en plus,si vous avez des images que votre application lit (mais elle n'est pas écrire to) la carte SD, et qui ne devrait être disponible que pour votre propre application, et qui pourrait être livrée lorsque votre application est installée ou mise à jour, alors il pourrait être judicieux de profiter d'une nouvelle facilité de Google Play pour les incorporer comme partie de votre application lorsqu'il est installé.
je suppose que vous stockez vos images sur la carte SD parce qu'elles sont trop grandes pour s'adapter dans votre fichier APK (compte tenu de sa limite de taille de 50 Mo, qui est encore plus petite que celle en pratique pour certains appareils, en raison de problèmes de mise en mémoire tampon).
si c'est le cas, alors vous pourriez considérer que Google Play, à partir du 3/5/2012, supporte l'attachement (à votre application) d'un maximum de deux "fichiers d'extension" d'un maximum 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 maintenu dans un dossier de carte SD spécifique à votre application, et accessible via une API fournie par la bibliothèque Downloader (nécessite un niveau D'API 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 la 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 SDK Android pour une utilisation avec des niveaux D'API plus anciens. Par exemple, sur mon installation, je trouve les versions API-8 ici:
<Android SDK base folder>\extras\google\play_apk_expansion\
ce même dossier inclut la bibliothèque Zip d'extension APK susmentionnée dans son sous-dossier zip_file.
je n'ai pas personnellement utilisé cette facilité pourtant, je le décris en me fondant uniquement sur les références citées.