Я пытаюсь загрузить/ссылаться на изображения из папки ресурсов приложения из HTML-страницы в WebView. В отличие от большинства примеров, сама страница HTML не находится в папке с ресурсами, но загружается с сервера через http. Основой этого вопроса являются некоторые улучшения производительности, которые должны сократить время загрузки (и количество переданных данных) путем загрузки статических изображений непосредственно с устройства. Я не уверен, что у Android есть некоторые ограничения здесь, потому что есть определенная возможность использовать приложение, разрешая доступ к локальному хранилищу файлов с удаленной загруженной веб-страницы.Android: Как ссылаться на изображения объектов с удаленно загруженной страницы html в webview
Сначала я попытался загрузить изображения, используя <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 отказался загружать/отображать изображение. Любые идеи, если и как это могло бы работать?
Вы нашли ответ на свой первоначальный вопрос (почему? File: // 'schem ro' content: // 'one is not working right)? – Olegas