protected void findImages(boolean internal, int howMany, LinkedList<ImageData> foundImages) { Uri uri = internal ? MediaStore.Images.Media.INTERNAL_CONTENT_URI : MediaStore.Images.Media.EXTERNAL_CONTENT_URI; String[] projection = { MediaStore.Images.Media.DATA, MediaStore.Images.Media.ORIENTATION, MediaStore.Images.Media.BUCKET_ID, MediaStore.Images.Media.BUCKET_DISPLAY_NAME }; String selection = ""; for (String id : getFoundAlbums()) { if (isInternalId(id) == internal && mSettings.isAlbumEnabled(id)) { String[] parts = id.split(":"); if (parts.length > 1) { if (selection.length() > 0) { selection += " OR "; } selection += MediaStore.Images.Media.BUCKET_ID + " = '" + parts[1] + "'"; } } } if (selection.isEmpty()) { return; } Cursor cursor = mResolver.query(uri, projection, selection, null, null); if (cursor != null) { int dataIndex = cursor.getColumnIndex(MediaStore.Images.Media.DATA); if (cursor.getCount() > howMany && mLastPosition == INVALID) { mLastPosition = pickRandomStart(cursor.getCount(), howMany); } cursor.moveToPosition(mLastPosition); if (dataIndex < 0) { log(TAG, "can't find the DATA column!"); } else { while (foundImages.size() < howMany && cursor.moveToNext()) { ImageData data = unpackImageData(cursor, null); data.uri = uri; foundImages.offer(data); mLastPosition = cursor.getPosition(); } if (cursor.isAfterLast()) { mLastPosition = -1; } if (cursor.isBeforeFirst()) { mLastPosition = INVALID; } } cursor.close(); } }