2014-10-24 4 views
0

Мне нужно случайно выбрать изображение из фотогалереи пользователя.Выберите случайное изображение из фотогалереи

Я не имею в виду, начиная намерение, как в:

Intent gallery = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
     startActivityForResult(gallery, GALLERY_PHOTO_REQUEST_CODE); 

ответ

1

Я хотел бы сделать так, но я не думаю, что я могу выбрать все галереи фотографий, я думаю, что это невозможно

File picturesDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 
File[] listFiles = picturesDirectory.listFiles(); 
Random r = new Random(); 
File randomPicture = listFiles[r.nextInt(listFiles.length)]; 
Uri pictureUri = Uri.fromFile(randomPicture); 

Затем вы можете использовать, что Ури (или файл) объект для выполнения ваших действий, например, загрузить его в ImageView: mImageView.setImageUri(pictureUri);

Надеется, что это поможет! Я помню, что вы не будете выбирать все изображения, а только изображения, хранящиеся в этой папке. На самом деле многие приложения сохраняют свои фотографии в других личных папках, которые могут быть недоступны.

+0

Это отлично работает для меня. Я объединил его: http://stackoverflow.com/a/21767418/2843455, но у меня есть еще один вопрос: Как выбрать только файлы, являющиеся изображениями? потому что он выбирает видео (.mp4) – PHPupil

+0

неважно, я получил его .. tnx !! – PHPupil

+0

См. Следующее переопределение метода listFiles: http://docs.oracle.com/javase/7/docs/api/java/io/File.html#listFiles(java.io.FileFilter) – rickyalbert

0

Используйте это, чтобы получить все изображения, а затем класс Java Random для случайного выбора индекса массива. После этого вы можете запросить конкретное изображение.

//where contextObject is your activity 
    ContentResolver cr = contextObject.getContentResolver(); 

    String[] columns = new String[] { 
        ImageColumns._ID, 
        ImageColumns.TITLE, 
        ImageColumns.DATA, 
        ImageColumns.MIME_TYPE, 
        ImageColumns.SIZE }; 
    cur = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
        columns, null, null, null); 

Образец образца взято с here.

+0

обычно добавляют «RANDOM»() "' в параметре 'sortOrder', возьмите первый элемент, это случайный! – njzk2

+0

Я даже не представлял, что вы можете это сделать. OP следует за предложением njzk2. Я не хочу редактировать, потому что у меня не будет возможности проверить его и убедиться, что мое редактирование действительно работает, но вы должны обязательно попробовать это. – FuegoFingers

+0

Предполагается, что запрос будет переведен в SQLite-запрос. В настоящее время он работает, но он разрушает разделение между слоем экспозиции и уровнем хранения. – njzk2

Смежные вопросы