English version   English version


Features

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

Download

Verwendung

Testdaten

Daten laden

Album-Image

Datei-Unterstützung

Fehlerbehandlung

Referenz

Eigenschaften

Funktionen

Ereignisse

Beispiel

Werkzeuge

Download

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.

Verwendung

Die Extension ist ein Wrapper um die Android MediaMetadataRetriever-Klasse.

Testdaten

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.

Daten laden

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.

Album-Image

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.

Datei-Unterstützung

Um den Zugriff auf die Dateien zu erleichtern, gibt es die Funktionen

Fehlerbehandlung

 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.

Referenz

Eigenschaften

Album
Ruft den Titel der Mediadatei ab oder legt ihn fest.
AlbumImageFile
Liest das Album-Image aus der angegebenen Datei. Der Dateiname kann nur dann abgerufen werden, wenn er per Programm festgelegt. Nach dem Aufruf von LoadMetaData oder LoadMetaDataAsync ist dieses Feld leer. Siehe auch Abschnitt Album-Image.
Wenn das Album-Image nicht geladen werden kann, wird das Ereignis Screen.ErrorOccurred mit der Fehlernummer 17500 ausgelöst.
AlbumImageHeightDip
Ruft die Höhe des Album-Image in DIP-Einheiten (Device Independent Pixel) ab.
AlbumImageHeightRaw
Ruft die Höhe des Album-Image in Pixel-Einheiten ab.
AlbumImageWidthDip
Ruft die Breite des Album-Image in DIP-Einheiten (Device Independent Pixel) ab.
AlbumImageWidthRaw
Ruft die Breite des Album-Image in Pixel-Einheiten ab.
Artist
Ruft den Interpret / Darsteller ab oder legt ihn fest.
Author
Ruft den Autor ab oder legt ihn fest.
Duration
Ruft die Dauer in Millisekunden ab oder legt sie fest.
DurationFormattedLong
Ruft die Dauer als Text im Format H:MM:SS ab.
DurationFormattedShort
Ruft die Dauer als Text im Format M:SS ab.
DurationSeconds
Ruft die Dauer in Sekunden ab oder legt sie fest.
Genre
Legt das Genre fest oder ruft es ab.
HasAlbumImage
Gibt an, ob ein gültiges Album-Image vorliegt.
MimeType
Ruft den Mime-Typ ab oder legt ihn fest.
Timeout
Legt fest, wie lange (in Sekunden) auf das Laden von Metadaten aus dem Internet gewartet werden soll. Die Voreinstellung ist 3 Sekunden.
Title
Ruft den Titel der Media-Datei ab oder legt ihn fest.
Writer
Ruft den Verfasser der Datei ab oder legt ihn fest.
Year
Ruft das Erstellungsjahr ab oder legt es fest.

Funktionen

GetAppDataDir (Prefix)
Liefert den Pfad auf das private Applikationsverzeichnis. Der bei Prefix angegebene wird den Namen vorangestellt. Der Aufruf von GetAppDataDir("file://") auf meinem Testgerät für das Beispiel-Programm liefert folgendes Ergebnis:  file:///data/user/0/edu.mit.appinventor.aicompanion3/.
GetDownloadDir (Prefix)
Liefert den Pfad auf das Download-Verzeichnis. Der bei Prefix angegebene wird den Namen vorangestellt. Der Aufruf von GetDownloadDir("file://") auf meinem Testgerät für das Beispiel-Programm liefert folgendes Ergebnis: file:///storage/emulated/0/Download/.
GetFileList (Directory)
Liefert eine Liste mit den Namen der Dateien im angegebenen Verzeichnis. Der Präfix file:// für den Parameter Directory ist optional. Unterverzeichnisnamen ist ein "D:" voran gestellt. Der Aufruf von GetFileList(GetAppDataDir()) auf meinem Testgerät für das Beispiel-Programm liefert eine Liste mit folgenden Elementen:
      
GetVolumes (Prefix)
Liefert eine Liste der installierten Speicher (Volumes). Unter Index 1 findest man meist den internen Speicher, unter Index 2 die externe SD-Karte. Der bei Prefix angegebene wird den Namen vorangestellt. Der Aufruf von getVolumes("file://) gibt auf meinem Testgerät folgende Elemente:
     file:///storage/emulated/
     file:///storage/F277-0260/
LoadMetaData (Source)
Lädt Media-Metadaten aus der angegebenen Media-Datei. Für mögliche Angaben bei Source siehe Daten laden. Der Rückgabewert ist true, wenn die Metadaten erfolgreich geladen werden konnten, ansonsten false.
Die Anwendung ist während des Auslesen blockiert (siehe auch Daten laden und Eigenschaft Timeout).
LoadMetaDataAsync (Source)
Lädt Media-Metadaten aus der angegebenen Media-Datei in einem eigenständigen Thread. Für mögliche Angaben bei Source siehe Daten laden. Nach Beendigung des Auslesevorgangs wird das Ereignis AfterLoadMetaData ausgelöst. Bevor nicht das Ereignis mit dem Parameter Success = true ausgelöst wurde, liegen keine gültigen Metadaten vor.
Die Anwendung ist während des Auslesen nicht blockiert (siehe auch Daten laden und Eigenschaft Timeout).
RemoveFile (Path)
Löscht die angegebene Datei. Der Präfix file:// beim Parameter Path ist optional.
RemoveFileFromAppDir (Filename)
Löscht die angegebene Datei im privaten Applikationsverzeichnis. Filename kann Unterverzeichnisse relativ zum privaten Applikationsverzeichnis enthalten (siehe GetAppDataDir).
ResizeAlbumImageDip (NewWidth, NewHeight)
Nimmt Größenänderung des Album-Image auf die angegebene Größe vor. Die Größenangaben erfolgt in der Einheit DIP (Device Independent Pixel).
Wenn eine der Größenangaben ≤ 0 ist, wird das Ereignis Screen.ErrorOccurred mit der Fehlernummer 17511 ausgelöst.
ResizeAlbumImageRaw (NewWidth, NewHeight)
Nimmt Größenänderung des Album-Image auf die angegebene Größe vor. Die Größenangaben erfolgt in der Einheit Pixel.
Wenn eine der Größenangaben ≤ 0 ist, wird das Ereignis Screen.ErrorOccurred mit der Fehlernummer 17511 ausgelöst.
SaveAlbumImage (Path, Format)
Speichert das Album-Image unter dem angegeben Datei-Pfad. Format: 0: PNG, 1: JPEG. Die Dateiendung .png bzw. .jpg wird nicht automatisch angefügt, sondern muss passend bei Path angegeben werden. Der Präfix file:// beim Parameter Path ist optional.
Wenn die Datei nicht geschrieben werden kann, wird das Ereignis Screen.ErrorOccurred mit der Fehlernummer 17512 ausgelöst.
Wenn der Parameter Format einen anderen Wert als 0 oder 1 hat, wird das Ereignis Screen.ErrorOccurred mit der Fehlernummer 17513 ausgelöst.
SaveAlbumImageToAppDir (Filename, Format)
Speichert die Datei relativ zum privaten Applikationsverzeichnis (siehe GetAppDataDir). Format: 0: PNG, 1: JPEG. Die Dateiendung .png bzw. .jpg wird nicht automatisch angefügt, sondern muss passend bei Path angegeben werden.
Wenn die Datei nicht geschrieben werden kann, wird das Ereignis Screen.ErrorOccurred mit der Fehlernummer 17512 ausgelöst.
Wenn der Parameter Format einen anderen Wert als 0 oder 1 hat, wird das Ereignis Screen.ErrorOccurred mit der Fehlernummer 17513 ausgelöst.
ToImageBlock (ImageBlock)
Zeigt, sofern vorhanden, das Album-Image in der angegebenen Image-Komponente an.
Wenn die übergebene Komponente ist nicht vom Typ Image ist, wird das Ereignis Screen.ErrorOccurred mit der Fehlernummer 17514 ausgelöst.

Ereignisse

AfterLoadMetaData (Success)
Das Ereignis wird ausgelöst, wenn nach dem Aufruf von LoadMetaDataAsync das Ergebnis des Einlese-Vorgangs vorliegt. Success hat den Wert true, wenn Metadaten eingelesen werden konnten, ansonsten den Wert false.

Beispiel

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.

Werkzeuge

Für die Erstellung eigener Extensions habe ich einige Tipps zusammengestellt: AI2 FAQ: Extensions entwickeln.