Eigene "Gallery", Bilder über Content Provider oder manuell laden

  • 0 Antworten
  • Letztes Antwortdatum
blackfire185

blackfire185

Stamm-User
40
Hallo,
Ich würde gerne eine Art eigene Gallery in meiner App verwirklichen, die folgendes kann:
  1. Übersicht über alle Ordner auf der SD-Karte, die Bilder enthalten
  2. Dann eine Überischt über alle In diesem Root Ordner enthaltenen Bilder geben, chronologisch geordnet

Punkt 1 konnte ich bereits einbauen, es wird die SD-Karte durchlaufen, bis jeder Ordner, der Bilder enthält, gefunden wurde. Dies dauert ca. 2s, ist also in meinen Augen aktzeptabel.

Das Problem stellt sich dann, wenn der Nutzer auf einen Ordner klickt, und dann die dort enthaltenen Bilder angezeigt bekommen haben will.

Mein bisheriges Vorgehen
Es werden alle Bilder in dem Ordner gefunden und als ArrayList<File> gespeichert. Dies funktioniert sehr schnell.
Nun habe ich sie nach file.lastModified() ordnen lassen und von den 20 aktuellsten Bildern ein Vorschaubild mittels
Code:
public Bitmap createThumbFromFile(File file) {
		
		return ThumbnailUtils.extractThumbnail(
				BitmapFactory.decodeFile(file.getPath()), THUMBSIZE, THUMBSIZE);

	}
erstellt. Dabei ist jedoch immer der Garbage Collector aktiv, wodurch das Erzeugen aller Vorschaubilder sehr lange dauert.
Wurden diese dann in meiner Gridview mit eigenem BaseAdapter angezeigt, gab es manchmal eine OutOfMemoryException. (hierbei habe ich noch nicht mit ViewHolder und dem Recyclen von Views gearbeitet, da das größte Problem bisher der GarbageCollector bei der Thumbnail Erzeugung war)

Meine Frage bezieht sich nun auf mein weiteres Vorgehen:
Es gibt ja noch den CursorLoader von Android, mit dem ich sowohl Vorschaubilder als auch die richtigen Bilder laden kann. Allerdings besitzt die Datenbank, die das bereitstellt, keine Informationen über den Pfad des Bildes.

Meine Idee:
Ich führe den Cursor Loader erst mit MediaStore.Images.Media.DISPLAY_NAME die Bilder, deren Name ich ja aus dem Ordner auslesen kann und hole mir die _id der Bilder, sortiert nach MediaStore.Images.Media.DATE_ADDED.
Mit dieser _id kann ich dann mit der selection MediaStore.Images.Thumbnails.IMAGE_ID die Abfrage für Thumbnails durchführen und diese dann Anzeigen lassen.

Meine Frage ist nun, ist _id bei der Abfrage mit MediaStore.Images.Media gleich wie MediaStore.Images.Thumbnails.IMAGE_ID?

Oder was mir auch noch eingefallen ist, kann ich die Uri einfach ersetzen durch den Filepath?

Ist mein Weg richtig, oder muss ich das ganze grundlegend anders machen?

Leider finde ich kein Tutorial dazu, was in die Richtung geht, alles was ich gefunden hatte, waren Tutorials, die alle Bilder angezeigt haben.

Warum ich mir die Mühe mache?
Nun, ich dem Nutzer ermöglichen will, mehrere Bilder auf einmal auswählen zu können und deren Path zu erhalten, was das startActivityForResult() für die Galerie leider nicht erfüllen kann.

Ich hoffe ihr versteht mein Problem und könnt mir helfen.

Gruß
blackfire185
 
Zuletzt bearbeitet:

Ähnliche Themen

BerndFfm
Antworten
7
Aufrufe
1.222
swa00
swa00
K
Antworten
3
Aufrufe
975
mezzothunder
mezzothunder
Zurück
Oben Unten