Ich versuche verweisen zu laden/Referenzbilder aus dem Vermögen Ordner App innerhalb einer HTML-Seite in einem WebView. Anders als in den meisten Beispielen befindet sich die HTML-Seite selbst nicht im Ordner Assets, sondern wird von einem Server über http geladen. Der Hintergrund dieser Frage sind einige Leistungsverbesserungen, die die Ladezeit (und die Menge der übertragenen Daten) reduzieren sollten, indem statische Bilder direkt vom Gerät geladen werden. Ich bin mir nicht sicher, ob Android hier einige Einschränkungen hat, da es eine gewisse Möglichkeit gibt, die App auszunutzen, indem man von einer entfernt geladenen Webseite auf den lokalen Dateispeicher zugreifen kann. mit <img src="file:///android_asset/myimage.png">
aber dies scheiterte (aus offensichtlichen Gründen)Android: Wie Asset Bilder von einem entfernt geladen HTML-Seite in webview
Ich versuchte zunächst, Bilder zu laden. Mein nächster Versuch war, eine ContentProvider
Klasse und Referenzbilder mit <img src="content://com.myapp.assetcontentprovider/myimage.png">
zu verwenden. Dieser Contentprovider wird wie folgt umgesetzt:
public class AssetContentProvider extends ContentProvider
{
private static final String URI_PREFIX = "content://com.myapp.assetcontentprovider";
public static String constructUri(String url) {
Uri uri = Uri.parse(url);
return uri.isAbsolute() ? url : URI_PREFIX + url;
}
@Override
public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
Log.d("AssetContentProvider", uri.getPath());
try {
return getContext().getAssets().openFd(uri.getPath().substring(1)).getParcelFileDescriptor();
} catch (IOException e) {
Log.d("AssetContentProvider", "IOException for " + uri.getPath());
throw new FileNotFoundException();
}
}
// more methods irrelevant for this post
}
Wenn die HTML-Seite geladen ich im Debug-Protokoll kann sehen, dass openFile()
tatsächlich aus dem WebView ausgelöst wird, und es gibt ein gültiges ParcelFileDescriptor
Objekt aber immer noch das Bild wird nicht angezeigt. Es werden keine Fehlermeldungen im Protokoll angezeigt, die mir sagen würden, dass WebView das Laden/Anzeigen des Bildes verweigert hat. Irgendwelche Ideen, ob und wie das funktionieren könnte? Diese
Haben Sie eine Antwort auf Ihre erste Frage (warum ‚file: //‘ -Regelung ro ‚Inhalt: //‘ ist richtig funktioniert nicht) gefunden? – Olegas