Получить путь MediaStore к определенной папке

Я создаю обновление для своего приложения, в нем у меня есть папка с сохраненными изображениями, которую я хотел бы отображать в GridView. Я уже использую библиотеку Ion . У создателя библиотеки (Koush Dutta) уже есть образец, который делает то, что я хочу, и отображает все изображения с SD-карты в GridView. ,

Я хочу показать только изображения из определенной папки на моей SD-карте (называемые комиксами) в GridView. Я использую код непосредственно из примера выше, только изменяя некоторые имена.

Моя проблема в том, что я не могу получить только изображения с SD-карты в GridView, в настоящее время он получает все изображения с SD-карты. Я хочу только из папки / sdcard / Comics /

Код

public class SavedComics extends Activity { private MyAdapter mAdapter; // Adapter to populate and imageview from an url contained in the array adapter private class MyAdapter extends ArrayAdapter<String> { public MyAdapter(Context context) { super(context, 0); } @Override public View getView(int position, View convertView, ViewGroup parent) { // see if we need to load more to get 40, otherwise populate the adapter if (position > getCount() - 4) loadMore(); if (convertView == null) convertView = getLayoutInflater().inflate(R.layout.image, null); // find the image view final ImageView iv = (ImageView) convertView.findViewById(R.id.comic); // select the image view Ion.with(iv) .centerCrop() .error(R.drawable.error) .load(getItem(position)); return convertView; } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.gallery); int cols = getResources().getDisplayMetrics().widthPixels / getResources().getDisplayMetrics().densityDpi * 2; GridView view = (GridView) findViewById(R.id.results); view.setNumColumns(cols); mAdapter = new MyAdapter(this); view.setAdapter(mAdapter); loadMore(); } Cursor mediaCursor; public void loadMore() { if (mediaCursor == null) { mediaCursor = getContentResolver().query(MediaStore.Files.getContentUri("external"), null, null, null, null); } int loaded = 0; while (mediaCursor.moveToNext() && loaded < 10) { // get the media type. ion can show images for both regular images AND video. int mediaType = mediaCursor.getInt(mediaCursor.getColumnIndex(MediaStore.Files.FileColumns.MEDIA_TYPE)); if (mediaType != MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE && mediaType != MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO) { continue; } loaded++; String uri = mediaCursor.getString(mediaCursor.getColumnIndex(MediaStore.Files.FileColumns.DATA)); File file = new File(uri); // turn this into a file uri if necessary/possible if (file.exists()) mAdapter.add(file.toURI().toString()); else mAdapter.add(uri); } } } 

Я пробовал несколько вещей, один из них был таким, как этот ответ :

 getContentResolver().query( uri1, Selection, android.provider.MediaStore.Audio.Media.DATA + " like ? ", new String[] {str}, null); 

Я просто понял это с помощью этого ответа .

Оказывается, все, что вам нужно сделать, это использовать этот код ниже, чтобы получить курсор, и он будет загружать только изображения из /sdcard/comics/ .

Обратите внимание, что я тестировал это с помощью библиотеки Ion и вашего кода, и это сработало для меня!

  mediaCursor = getContentResolver().query( MediaStore.Files.getContentUri("external"), null, MediaStore.Images.Media.DATA + " like ? ", new String[] {"%comics%"}, null); 
Intereting Posts