Androidian
Androidian

Reputation: 1075

Specify a folder in MediaStore managedQuery

Hi i want to specify a folder on the SD card to retrieve all of images in a subfolder of that folder (ex, /mnt/sdcard/Folder/SubFolder). I've this:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.gallery);
    GridView gridview = (GridView) findViewById(R.id.gallery);
    registerForContextMenu(gridview);

    id = getIntent().getExtras().getString("ID");

    // Set up an array of the Thumbnail Image ID column we want
    String[] projection = {MediaStore.Images.Thumbnails._ID};
    // Create the cursor pointing to the SDCard
    cursor = managedQuery( MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,
            projection, // Which columns to return
            null,       // Return all rows
            null,
            MediaStore.Images.Thumbnails.IMAGE_ID);
    // Get the column index of the Thumbnails Image ID
    columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Thumbnails._ID);

And in setAdapter of my gridview i have:

gridview.setAdapter(new BaseAdapter() {
        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView picturesView;
            if (convertView == null) {
                picturesView = new ImageView(mContext);
                // Move cursor to current position
                cursor.moveToPosition(position);
                // Get the current value for the requested column
                int imageID = cursor.getInt(columnIndex);
                // Set the content of the image based on the provided URI
                picturesView.setImageURI(Uri.withAppendedPath(MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, "" + imageID));
                picturesView.setScaleType(ImageView.ScaleType.FIT_CENTER);
                picturesView.setPadding(8, 8, 8, 8);
                picturesView.setLayoutParams(new GridView.LayoutParams(100, 100));
            }
            else {
                picturesView = (ImageView)convertView;
            }
            return picturesView;
        }

        public int getCount() {
            return cursor.getCount();
        }

        public Object getItem(int position) {
            return position;
        }

        public long getItemId(int position) {
            return position;
        }

    });

That's works but show me all images contained in sdcard... I've tried to set a URI path, like "content:///mnt/sdcard/folder/subfolder" but it doesen't work...How can I specify, in MediaStore managedQuery, a specific folder to scan??

Thank you all in advance! :)

Upvotes: 0

Views: 2277

Answers (1)

Asahi
Asahi

Reputation: 13506

Try getting MediaStore.Images.Media.DATA field - it contains the full path to the image file. Then you can either run thru the cursor and select only files you're interested in or build your query so it returns only entries with path "LIKE %your_folder_name%"

Upvotes: 3

Related Questions