Укажите папку в MediaStore managedQuery - PullRequest
0 голосов
/ 03 марта 2012

Привет, я хочу указать папку на SD-карте для получения всех изображений в подпапке этой папки (например, / mnt / sdcard / Folder / SubFolder). У меня есть это:

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

И в setAdapter моего gridview у меня есть:

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

    });

Это работает, но покажи мне все изображения, содержащиеся в SDCard ... Я пытался установить путь URI, например, "content: /// mnt / sdcard / folder / subfolder", но он не работает ... Как я могу указать в MediaStore managedQuery конкретную папку для сканирования ??

Спасибо всем заранее! :)

1 Ответ

3 голосов
/ 03 марта 2012

Попробуйте получить MediaStore.Images.Media.DATA поле - оно содержит полный путь к файлу изображения. Затем вы можете либо запустить курсор и выбрать только те файлы, которые вам интересны, или создать свой запрос, чтобы он возвращал только записи с путем "LIKE% your_folder_name%"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...