2012-09-07 4 views
2

J'ai ce morceau de code qui me permet de lire le contenu de la galerie du téléphone et de faire défiler son contenu au hasard.Lire le contenu d'un dossier au hasard

public static Uri getRandomImage(ContentResolver resolver) { 

    String[] projection = new String[] { 
     BaseColumns._ID 

    }; 

    Random rand = new Random(); 
    int p = 2 + rand.nextInt(8-2+1); 

    Uri uri = p == 0 ? Media.EXTERNAL_CONTENT_URI : Media.EXTERNAL_CONTENT_URI; 

    Cursor cursor = Media.query(resolver, uri, projection, null, MediaColumns._ID); 
    if (cursor == null || cursor.getCount() <= 0) { 
      return null; 
    } 

    cursor.moveToPosition(new Random().nextInt(cursor.getCount())); 

    return Uri.withAppendedPath(uri, cursor.getString(0)); 
} 

Mais je voudrais modifier ce code pour lire le contenu d'un dossier défini par moi. Comment puis-je faire ceci?

merci beaucoup

+0

http://mattgemmell.com/2008/12/08/what-have-you-tried/? – njzk2

+0

J'ai déjà mis dans un dossier créé par moi un ensemble de fichiers, dès que l'application est installée et démarrée. J'ai essayé de changer le code que j'ai posté en utilisant ceci: Uri uri = Uri.parse ("/ sdcard/MyFolder /"); – David

+0

Je vous ai donné le point de départ: http://android-coding.blogspot.com/2011/10/list-filesdirectory-in-android.html pour lire les fichiers dans le répertoire. À partir de là, vous pouvez facilement obtenir des fichiers aléatoires en plaçant les fichiers en premier dans le tableau. – ariefbayu

Répondre

0

Probablement l'un des plus simple à faire: le nom de chaque fichier dans votre dossier numérique-à-dire (en supposant qu'ils sont tous jpg) les nom 1.jpg, 2.jpg, et 3.jpg bientôt. Maintenant, tout ce que vous devez faire est de générer un tableau de nombres aléatoires distincts entre 1 et le nombre de fichiers dans votre dossier et de générer un uri en concaténant ces nombres aléatoires avec .jpg et ensuite les afficher.

+0

fondamentalement mon problème est très simple, l'URI ne devrait pas être Media.EXTERNAL_CONTENT_URI, mais un chemin spécifié par moi; et le curseur devrait spostari aléatoire dans ce dossier. – David

0

Peut-être que vous devriez définir l'URI à une valeur différente?

Random rand = new Random(); 
int p = 2 + rand.nextInt(8-2+1); 

Uri uri = p == 0 ? Media.EXTERNAL_CONTENT_URI : Media.EXTERNAL_CONTENT_URI; 

Ce code définit toujours l'URI Media.EXTERNAL_CONTENT_URI ... quelle que soit la valeur de l'entier p est ... Personnellement, même je ne peux pas vraiment voir ce que vous essayez de faire là-bas.

+0

fondamentalement mon problème est très simple, l'URI ne devrait pas être Media.EXTERNAL_CONTENT_URI, mais un chemin spécifié de moi; et le curseur devrait spostari aléatoire dans ce dossier. – David

0

Extraire des fichiers aléatoires ou sélectionner un répertoire est assez facile.

Vous pouvez utiliser cet extrait:

private File getRandomFile(File root) { 
    File[] files = root.listFiles(); 

    Random randomizer = new Random();  
    return files[randomizer.nextInt(files.length - 1)]; 
} 

Si vous avez besoin de la méthode pour revenir Uri, vous pouvez changer la signature de retour et méthode:

private Uri getRandomFile(File root) { 
    File[] files = root.listFiles(); 

    Random randomizer = new Random();  
    File f = files[randomizer.nextInt(files.length - 1)]; 
    return Uri.fromFile(f); 
} 

En ce qui concerne cursor exigence, vous devriez être capable d'enrouler cette méthode à une autre méthode et de faire une demande de pont en conséquence.

+0

merci, mais dans mon application, j'ai besoin de Uri et Cursor, parce que mes méthodes retournent Uri et Cursor – David

+0

voir ma réponse mise à jour. – ariefbayu