MediaStore-Pfad eines bestimmten Ordners abrufen
Ich erstelle ein Update für meine Anwendung. Darin befindet sich ein Ordner mit gespeicherten Bildern, die ich in einer GridView anzeigen möchte. Ich benutze bereits dasIon Bibliothek. Der Ersteller der Bibliothek (Koush Dutta) hat bereits ein Beispiel, das tut, was ich will, und zeigt alle Bilder aus dem @ a SD-Karte in einer GridView..
Ich möchte nur die Bilder aus einem bestimmten Ordner auf meiner SD-Karte (Comics genannt) in GridView anzeigen. Ich verwende den Code direkt aus dem obigen Beispiel und ändere nur einige Namen.
Mein Proble ist, dass ich nicht nur die Bilder von der SD-Karte in die GridView bekommen kann, sondern derzeit alle Bilder von der SD-Karte. Ich will nur aus dem ordner / sdcard / comics /
Cod
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);
}
}
}
ch habe ein paar Dinge ausprobiert, von denen eines etwas iswie diese Antwort:
getContentResolver().query(
uri1, Selection,
android.provider.MediaStore.Audio.Media.DATA + " like ? ",
new String[] {str}, null);