Android: как ссылаться на изображения объектов с удаленной загруженной страницы html в webview

Я пытаюсь загрузить / ссылку изображений из папки ресурсов приложения из HTML-страницы в WebView. В отличие от большинства примеров, сама страница HTML не находится в папке с ресурсами, но загружается с сервера через http. Основой этого вопроса являются некоторые улучшения производительности, которые должны сократить время загрузки (и количество переданных данных) путем загрузки статических изображений непосредственно с устройства. Я не уверен, что у Android есть некоторые ограничения здесь, потому что есть определенная возможность использовать приложение, разрешая доступ к локальному хранилищу файлов с удаленной загруженной веб-страницы.

Сначала я попытался загрузить изображения с помощью <img src="file:///android_asset/myimage.png"> но это не удалось (по понятным причинам). Моя следующая попытка состояла в том, чтобы использовать класс ContentProvider и ссылочные изображения, используя <img src="content://com.myapp.assetcontentprovider/myimage.png"> . Этот ContentProvider реализован следующим образом:

 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 } 

При загрузке HTML-страницы я могу видеть в журнале отладки, что openFile() фактически запускается из WebView и возвращает действительный объект ParcelFileDescriptor но все же изображение не отображается. В журнале нет сообщений об ошибках, которые скажут мне, что WebView отказался загружать / отображать изображение. Любые идеи, если и как это могло бы работать?

Solutions Collecting From Web of "Android: как ссылаться на изображения объектов с удаленной загруженной страницы html в webview"

Хорошо, благодаря ответу mufumbo я нашел рабочий хак для смешивания локальных активов на удаленных загруженных HTML-страницах. Страницы, загруженные с использованием метода loadUrl() , не загружают изображения, связанные с файлом: /// android_asset / … В качестве обходного пути вы можете получить HTML-страницу, используя org.apache.http.client.methods.HttpGet.HttpGet() А затем передать его в WebView с помощью loadDataWithBaseURL() . В этом случае WebView загрузит ресурсы, связанные с файлом: /// android_asset /, а также изображения и скрипты через HTTP. Вот мой настроенный код веб-просмотра:

 public class CustomWebView extends WebView { private String mURL; public void loadUrlWithAssets(final String url) { // copy url to member to allow inner classes accessing it mURL = url; new Thread(new Runnable() { public void run() { String html; try { html = NetUtil.httpGETResponse(mURL); // replace some file paths in html with file:///android_asset/... loadDataWithBaseURL(mURL, html, "text/html", "UTF-8", ""); } catch (IOException e) { Log.e("CustomWebView.loadUrlWithAssets", "IOException", e); } } }).start(); } } 

Обратите внимание, что весь HTTP-выбор NetUtil в домашний класс NetUtil .

С помощью этого класса можно отображать HTML-страницы с веб-сервера и иметь некоторые статические ресурсы, такие как изображения или таблицы стилей, загруженные из папки ресурсов приложения, чтобы повысить скорость загрузки и сэкономить пропускную способность.

Вот как я это делаю в java-части:

String myHTML = "<img src = \" file: ///android_asset/myimage.jpg \ ""; MyWebView.loadDataWithBaseURL ("file: /// android_asset /", myHTML, "text / html", "UTF-8", "");

ура