2011-05-27 2 views
2

J'ai une activité dans mon application qui est essentiellement une galerie qui affiche les images situées sur ma carte SD. J'utilise cette fonction pour remonter le sdcard pour rechercher de nouvelles images lorsque l'activité commence:Android SDCard délai de montage

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

La chose est quand je fais la galerie ne montre pas les images mises à jour comme Android prend du temps à analyser. Donc, je mets un sommeil après que d'attendre l'analyse pour terminer comme ceci:

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

    try { 
     Thread.sleep(2000); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 

Cela fonctionne, mais fait la pause d'application pendant 2 secondes. Y a-t-il une meilleure façon de gérer cela en mettant un dialogue de chargement? Je ne suis pas sûr de savoir comment identifier quand l'analyse par carte SD a été terminée afin que je puisse reprendre l'activité.

Répondre

3

C'est certainement une mauvaise approche à prendre. Tout d'abord, Thread.sleep() est quelque chose qui devrait généralement être évitée. Deuxièmement, il n'y a aucun moyen d'assurer que l'analyse est terminée (et s'il y a beaucoup de photos ou un appareil lent?).

Le meilleur moyen est de le faire de manière asynchrone. Vous pouvez configurer un BroadcastReciever pour écouter Intent.ACTION_MEDIA_SCANNER_FINISHED. Cette intention contiendra le répertoire que vous avez fourni précédemment en tant que champ de données.