2

電話のギャラリーの内容を読み取り、その内容をランダムにスクロールできるようにするこのコードがあります。

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));
}

しかし、私が設定したフォルダーの内容を読み取るようにこのコードを変更したいと思います。これどうやってするの?

どうもありがとうございます

4

3 に答える 3

0

ランダムなファイルまたは選択したディレクトリを取得するのは非常に簡単です。

次のスニペットを使用できます。

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

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

メソッドで return が必要な場合はUri、 return とメソッドのシグネチャを変更できます。

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); 
}

要件に関してはcursor、このメソッドを別のメソッドにラップし、それに応じてリクエストをブリッジできる必要があります。

于 2012-09-07T10:51:45.243 に答える
0

おそらく最も簡単な方法の 1 つ: フォルダー内の各ファイルに番号を付けます (すべて jpg であると仮定して) 1.jpg、2.jpg、3.jpg などの名前を付けます。あとは、1 からフォルダー内のファイル数までの個別の乱数の配列を生成し、この乱数を連結して uri を生成し、.jpgそれらを表示するだけです。

于 2012-09-07T10:02:27.343 に答える
0

URI を別の値に設定する必要がありますか?

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

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

このコードは常にURIをMedia.EXTERNAL_CONTENT_URIに設定します...整数pの値に関係なく...個人的には、あなたがそこで何をしようとしているのかさえ実際にはわかりません...

于 2012-09-07T10:03:12.870 に答える