07. Jul

ContentProvider: Lokale und interne Bilder in Android Webview verwenden

Webview sind eine feine Sache, um in einer Android-App HTML-Inhalte zu laden und darzustellen. Am einfachsten ist es, wenn eine externe URL mit extern verweisenden Ressourcen aufgerufen werden. Android lädt Javascript-, CSS-Dateien und Bilder innerhalb der Webview wie ein normaler Browser und stellt diese korrekt dar. Etwas schwieriger wird es, wenn beispielsweise das HTML dynamisch zusammengebaut und mit lokalen/internen Bildern (oder auch Javascript-/CSS-Dateien) ergänzt werden soll.

Im einfachsten Fall wird wie bereits erwähnt lediglich eine externe URL geladen. In allen folgenden Beispielen gehen wir davon aus, dass bereits eine Webview in der entsprechenden Layout-XML definiert ist.

Dynamisches HTML mit lokalem Bild aus dem assets-Ordner

In diesem Fall muss der HTML-Code lediglich mit der entsprechenden Base-URL, hier der assets-Ordner, geladen werden.

 Dynamisches HTML mit lokalem Bild aus dem internen Speicher.

Etwas schwieriger wird es, wenn Dateien aus dem internen Speicher geladen werden sollen. Denn Dateien, die beispielsweise unter files://data/data/mein.package.name/files  gespeichert sind, können von Haus aus nicht an eine externe App (z.B. Teilen eines Bildes per WhatsApp) weitergeben werden. Auf den internen Dateispeicher einer App haben externe Apps keinen Zugriff. Ein WebView gilt hier ebenfalls wie eine externe App und damit würde folgender Aufruf fehlschlagen:

Die Lösung liegt hier bei der Nutzung eines ContentProvider, bzw. bei der Einrichtung eines FileProviders. Dieser gibt externen Apps temporär Zugriff auf interne Ressourcen. Im ersten Schritt müssen wir den FileProvider im Manifest bekannt machen:

 Im zweiten Schritt müssen wir im xml-Ordner im Ressourcen-Verzeichnis die Datei „fileprovider.xml“ anlegen und die freizugebenden Pfade definieren:

Mit diesen Einstellungen können Sie ab sofort über den eingerichteten FileProvider auf interne Ressourcen zugreifen

Weitere Informationen erhalten Sie unter:

Fehlerquellen

Sollten die internen Ressourcen dennoch nicht korrekt angezeigt werden, liegt es eventuell daran, dass Sie bei den Einstellungen des WebViews einen Fehler haben. Achten Sie unbedingt darauf, dass folgender Wert eingestellt ist, bzw. nicht auf true steht:

 

 

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.