Mediadateien enthalten oftmals Metadaten. Diese Extension extrahiert Metadaten aus Mediadateien und stellt sie zur Verfügung. Die Metadaten können sowohl aus physisch vorhanden Dateien als auch aus Streaming-Dateien (z.B. "https://...mp3) extrahiert werden. Sämtliche Daten können per Programm ergänzt werden.
Die UrsMediaNotification-Extension kann die ermittelten Metadaten direkt übernehmen (später!!!). Ein in den Metadaten enthaltenes Album-Image kann gespeichert oder direkt an eine Image-Komponente übergeben werden.
Version | Anpassungen |
---|---|
1.0 (2021-07-06) | Initiale Version |
1.1 (2024-09-04) | Anpassungen an Android 14 |
Das ZIP-Archiv UrsAI2MediaHelper zum Download. Das Archiv enthält den Quellcode, das kompilierte Binary zum Upload in den App Inventor und eine Beispiel-Anwendung.
Die Extension ist ein Wrapper um die Android MediaMetadataRetriever-Klasse.
Unter der Adresse https://ullisroboterseite.de/test.mp3 steht eine mit Metadaten versehene Testdatei zur Verfügung. Das Beispiel enthält die gleiche Datei als Asset-Datei.
Die wichtigsten Methoden sind LoadMetaData und LoadMetaDataAsync. Diese beiden Methoden extrahieren die Metadaten aus einer Media-Datei. Für den Parameter Source sind folgende Angaben möglich:
Typ | Präfix | Beispiel |
---|---|---|
URL | http oder https | https://ullisroboterseite.de/test.mp3 |
Asset | // oder nichts | //test.mp3 oder einfach nur test.mp3 |
Datei, relativer Pfad | / | /data/user/0/edu.mit.appinventor.aicompanion3/test.mp3 |
Datei, absoluter Pfad | file:/// | file:///Android/data/edu.mit.appinventor.aicompanion3/test.mp3 |
Wenn eine ungültige Dateiangabe gemacht wird, die angegeben Datei nicht existiert oder keine Media-Datei ist, kann es bis zu 30 Sekunden dauern, bis der MediaMetadataRetriever dies erkennt und zurück meldet. Dies gilt besonders, wenn die Dateien aus dem Internet abgerufen werden. Über die Eigenschaft Timeout kann festgelegt werden, wie lange maximal auf die Rückmeldung gewartet werden soll.
LoadMetaData wartet auf die Rückmeldung des MediaMetadataRetriever und liefert zurück, ob der Vorgang erfolgreich war. Die Anwendung bleibt solange inaktiv. LoadMetaDataAsync lädt die Metadaten in einem eigenständigen Thread und meldet das Ergebnis über das Ereignis AfterLoadMetaData zurück. Die Anwendung bleibt während der Ermittlung der Metadaten aktiv. Man muss jedoch darauf achten, dass man nicht auf die Daten zugreifen kann, bevor das Ereignis mit dem Parameter Success = true ausgelöst wurde.
Hinweis: Es ist nicht so, dass immer aller Metadaten in der Media-Datei vorhanden sind.
Für AlbumImageFile sind folgende Angaben möglich:
Typ | Präfix | Beispiel |
---|---|---|
URL | http oder https | https://ullisroboterseite.de/ulli.png |
Asset | // oder nichts | //ulli.png oder einfach nur ulli.png |
Datei, relativer Pfad | / | /data/user/0/edu.mit.appinventor.aicompanion3/ulli.png |
Datei, absoluter Pfad | file:/// | file:///Android/data/edu.mit.appinventor.aicompanion3/ulli.png |
Bei der Angabe einer URL ist zu beachten, dass das Bild synchron geladen wird. Dies kann bei großen Dateien oder langsamen Verbindungen einige Zeit in Anspruch nehmen. Eine andere Möglichkeit ist es, eine Extension zu verwenden, die einen asynchronen (nebenläufigen) Download der Datei ermöglicht (z.B. die Extension ImageLoader).
Die Eigenschaften AlbumImageWidthDip, AlbumImageHeightDip, AlbumImageWidthRaw und AlbumImageHeightRaw liefern Größenangaben zu der Grafik. Mit den Methoden ResizeAlbumImageDip und ResizeAlbumImageRaw kann die Größe der Grafik angepasst werden. Die Methoden SaveAlbumImage und SaveAlbumImageToAppDir speichern die Grafik als Datei und kann somit anderen, dateibasierten Komponenten zur Verfügung gestellt werden.
Die Methode ToImageBlock zeigt die Grafik in der angegebenen Image-Komponente an.
Um den Zugriff auf die Dateien zu erleichtern, gibt es die Funktionen
Fehler werden über das Ereignisse Screen.ErrorOccurred gemeldet.
Code | Text | Bedeutung | Anmerkung |
---|---|---|---|
17510 | Album image not found. | Das angegebene Album-Image konnte nicht geladen werden. | Betroffene Funktion ist AlbumImageFile. |
17511 | Invalid size. | Ungültige Größenangabe, Breite oder Höhe ≤ 0. | Betroffene Funktionen sind ResizeAlbumImageDip und ResizeAlbumImageRaw. |
17512 | IO error & Fehlergrund. | Die Datei konnte nicht beschrieben oder gelöscht werden. | Betroffene Funktionen sind SaveAlbumImage, SaveAlbumImageToAppDir, RemoveFile und RemoveFileFromAppDir. |
17513 | Invalid format. | Die Formatangabe ist ungültig. 0 oder 1 ist erlaubt. | Betroffene Funktionen sind SaveAlbumImage und SaveAlbumImageToAppDir. |
17514 | Invalid component type. | Die übergebene Komponente ist nicht vom Typ Image. | Betroffene Funktion ist ToImageBlock. |
GetAppDataDir("file://")
auf meinem Testgerät
für das Beispiel-Programm liefert folgendes Ergebnis: file:///data/user/0/edu.mit.appinventor.aicompanion3/.
GetDownloadDir("file://")
auf meinem Testgerät
für das Beispiel-Programm liefert folgendes Ergebnis: file:///storage/emulated/0/Download/.GetFileList(GetAppDataDir())
auf meinem
Testgerät für das Beispiel-Programm liefert eine Liste mit folgenden Elementen:getVolumes("file://)
gibt auf meinem Testgerät folgende Elemente:Das Download-Archiv enthält ein Beispiel-Projekt:
MediaHelper Test
Mit dem Beispiel können Media-Metadaten synchron (Load Media Metadata) und asynchron (Load Media Metadata async) geladen werden. Das Album-Image kann im privaten Ordner der App gespeichert (Save album image) und auch wieder gelöscht (Remove file) werden. Die Schaltfläche List files listet die Dateien im privaten Ordner der App.
Für die Erstellung eigener Extensions habe ich einige Tipps zusammengestellt: AI2 FAQ: Extensions entwickeln.