Je n'ai pas réussi à obtenir l'affichage des vignettes pour un dossier en fonctionnement. Au lieu de cela, j'ai réussi quelque chose presque aussi bien en lançant la galerie sur la première image dans le dossier.
Voici une description de ce que je voulais accomplir. Un utilisateur sélectionne un enregistrement spécifique dans une vue de liste. Cet enregistrement peut avoir quelques images associées. Je voulais être capable de parcourir ces images en utilisant l'application Gallery3D cool sur le Nexus One (maintenant avec le zoom multitouch!). Si les images de cet enregistrement ne sont pas déjà mises en cache sur la carte SD de l'appareil, je les téléchargerai sous forme de fichier zip. Je puis extraire ce fichier dans un répertoire cache pour cet enregistrement sur la carte SD. Par la suite, je voulais lancer la galerie et afficher uniquement les images dans ce répertoire cache.
L'exécution du téléchargement et l'extraction du fichier zip sur la carte SD n'étaient pas un problème. Mais, pour que la galerie fonctionne, j'ai dû utiliser MediaScannerConnection avec un MediaScannerConnectionClient. Après avoir obtenu la connexion de l'analyseur (qui était en quelque sorte flakey), j'ai bouclé tous les fichiers dans le répertoire du cache en appelant scanner.scanFile. Le MediaScannerConnectionClient # onScanCompleted ajoute les uri résultants à une variable membre ArrayList. Une fois le processus terminé, je lance la galerie en passant le premier uri de cette liste. Cela afficherait la première image dans le répertoire. J'aurais préféré la vue en vignettes mais c'est assez bon.
Je ne suis pas totalement à l'aise avec cette solution. Il semble que MediaScannerConnection fonctionne de manière asynchrone, donc mon AsyncTask fait un sondage/sleep pour voir si l'analyse est terminée.
Est-ce que quelqu'un d'autre avait des problèmes avec le MediaScannerConnection ne se connectant pas sur le premier appel?Pour contourner ce que je fais quelque chose comme:
MediaScannerConnection scanner = ...;
for (int attempts = 0; attempts < MAX_ATTEMPTS; attempts++) {
scanner.connect();
if (scanner.isConnected()) { break; }
else {
try { Thread.sleep(5); }
catch (Exception e){}
}
}
if (!scanner.isConnected()) {
throw new IllegalStateException("Unable to establish media scanner connection!");
}
laid Je sais, mais je ne sais pas pourquoi il a de la difficulté de la première connexion. : -/
MISE À JOUR: Merci à jeffamaphone, j'ai été en mesure de vider ce code moche. Maintenant, OnItemClickListener appelle simplement scanner.connect(). Le client qui est passé au constructeur de l'analyseur initialise le DownloadAsyncTask qui met à jour un ProgressDialog pendant qu'il décompresse les fichiers et appelle scanner.scanFiles (...);
Je pense qu'il y a un moyen de le faire.Mettez-moi d'enquêter un peu –
Avez-vous trouvé la solution? –