Ich frage die Images
Tabelle ab, um alle Bilder im Verzeichnis MediaStore.Images.Media.EXTERNAL_CONTENT_URI
zu erhalten.Erhalte URI von ContentResolver.query()
Siehe die folgende Abfrage:
String[] what = new String[]{ MediaStore.Images.ImageColumns.DATE_TAKEN,
MediaStore.Images.ImageColumns._ID,
MediaStore.Images.ImageColumns.MIME_TYPE,
MediaStore.Images.ImageColumns.DATA };
String where = MediaStore.Images.Media.MIME_TYPE + "='image/jpeg'" +
" OR " + MediaStore.Images.Media.MIME_TYPE + "='image/png’";
Cursor cursor = getContext().getContentResolver()
.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
what,
where,
null,
MediaStore.Images.ImageColumns.DATE_TAKEN + " DESC”);
Nun würde Ich mag ein Uri haben, um jeweils das Ergebnis zeigt. Das ist, was ich jetzt tue:
int dataIndex = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
String path = cursor.getString(dataIndex);
final Uri uri = Uri.fromFile(new File(path));
Z. B., nehme ich den Weg von der DATA
Spalte, eine Datei erstellen und Uri.fromFile
verwenden. Ich habe zwei Fragen.
Funktioniert das garantiert? Ist die obige Abfrage garantiert, dass Pfade in der Datenspalte zurückgegeben werden? Es funktioniert für alle Bilder in meinem Telefon:
path
ist immer ein Pfad, wie/storage/0/whatever.jpg
, unduri.toString()
ist das gleiche, aber mit dem Dateischema. Dennoch können Bilder sehr gut durch content: // uris definiert werden, aber ich sehe nicht, wie (und ob) diese in der Bildtabelle dargestellt werden.Wenn nicht, was sollte ich in der
DATA
Spalte erwarten, und wie man einen Uri davon erhält?
Interessant, danke. Nur eine Sache über den "möglicherweise nicht verwendbaren Teil". Wie ich es verstehe, meinen Sie, dass ich auf diesen keine neue Datei (Pfad) aufrufen kann. Aber wenn ich einen Uri baue, wie du gesagt hast, werden sie durch ContentResolver.open() zugänglich sein? – natario
Rewording, ist der Uri mit ContentUri s sicher (d. H. Funktioniert auch in Rand Fällen wie Bilder in Wechseldatenträger) oder sollte ich irgendwo einen Scheck hinzufügen? – natario
@mvai: Solange Sie 'READ_EXTERNAL_STORAGE' haben, sollten Sie in Ordnung sein. Allerdings wird das Testen empfohlen. :-) Ich habe mehr mit Videos gearbeitet als mit Standbildern, und es scheint mir gut zu gehen. Das schlechteste Ergebnis ist genau das, was Sie mit dem 'File'-Ansatz haben: kein Zugriff. – CommonsWare