2016-11-29 2 views
4

Kontext:Load Image von lokalen privaten Verzeichnis in einem Webview

Meine App zeigt manchmal "Sheets", die HTML-Dateien sind, die Texte und Bilder enthalten:

<p>image description </p> 
<p><img src="/api/medias/get/videos/56afad6447eba61c8099544b?thumbnail=true&amp;company=4f86d0a9d655ab9794f5d1d2&amp;fullSizedCover=true" 
    alt="" 
    data-id="56afad6447eba61c8099544b" 
    data-type="video" data-width="640" data-height="1136" /></p> 

Dann benutze ich body.loadDataWithBaseURL(<my api url>, body, "text/html; charset=UTF-8", null, null);

Ich denke nicht, dass es relevant ist, aber ich werde es nur für den Fall sagen, ich habe einen Vorlagenkörper, der CSS und Javascript enthält. das js-skript erkennt bilder klicken und überträgt die "daten-id" an eine android-methode (über eine JavascriptInterface). In diesem Fall öffnet es einen Videoplayer und spielt es ab.


Problem:

Meine App ermöglichen es dem Benutzer, diese Blätter für letztere offline Visualisierung zum Download bereit. So lade ich die html, dann laden Sie die Bilder auf meinem lokalen privaten Verzeichnis (Context.getFileDir()) und ändern Sie die src des html die „Miniatur“ Quellen für die Bilder zu setzen I heruntergeladen

<p>video</p> 
<p><img src="69c623955ecb5bd414f908cd383f3809.jpg" 
    alt="" 
    data-id="56afad6447eba61c8099544b" 
    data-type="video" data-width="640" data-height="360" /></p> 

Meine Frage ist: Was stelle ich als Basis-URL zu meinem Webview, um das erwartete Verhalten zu erhalten (zB: Anzeige der heruntergeladenen Bilder).

Ich versuchte Context.getFileDir().getAbsolutePath(), content://com.android.htmlfileprovider und einige andere.

Sollte ich anders machen?

Vielen viel,


Das funktioniert gut:

Picasso.with(iv.getContext()).load(new File(getContext().getFilesDir() + "/" + "69c623955ecb5bd414f908cd383f3809.jpg")).into(iv);

Die html:

<p>video</p> 
<p><img src="69c623955ecb5bd414f908cd383f3809.jpg" alt="" data-id="56afad6447eba61c8099544b" data-type="video" data-width="640" data-height="360" /></p> 

meine Basis url: baseUrl = Uri.fromFile(getContext().getFilesDir()).toString();

Und finaly: webview.loadDataWithBaseURL(baseUrl, body, "text/html; charset=UTF-8", null, null);

+0

"Ich habe Context.getFileDir() versucht. GetAbsolutePath()," - versuchen Sie das, aber mit einem 'file' Schema. Einfacher zu verwenden 'Uri.fromFile (getFilesDir()). ToString()'. – CommonsWare

+0

Meine Bilder werden immer noch nicht mit dieser baseUrl angezeigt: 'file: /// data/user/0//dateien', wheareas' neue Datei (Context.getFilesDir() + "/" + "69c623955ecb5bd414f908cd383f3809.jpg") .exists() '== true. –

+0

@CommonsWare auch sind diese nützlich? (hatte vorher keine, fügte nur hinzu, aber es scheint nichts zu ändern): - 'body.getSettings(). setAllowFileAccess (true);' - 'body.getSettings(). setAllowContentAccess (true) ; ' -' body.getSettings().setAllowFileAccessFromFileURLs (true); ' -' body.getSettings(). setAllowUniversalAccessFromFileURLs (true); ' –

Antwort

0

Sie können versuchen, null baseUrl zu verwenden, wenn Sie bereits/Vorlage heruntergeladen haben, und übergeben Sie einfach die HTML-Vorlage als Körper zur Webansicht. Und vor der Übergabe finden Sie img Tags und setzen Sie img src mit einem vollständigen Pfad zur lokal gespeicherten Datei. Smth like:

+0

Ich weiß nicht warum, aber in der Tat, Es funktioniert nicht setzen die "Basis" in der Basis-URL, aber Null übergeben und es manuell in die src Tags funktioniert –

Verwandte Themen