У меня очень сложная ошибка: в моем приложении я использую в веб-представлении отображение локальных изображений.до версии ' 76.0.3809.111 ' веб-обзора все работало идеально, но с этой версии, когда я пытаюсь отобразить эти изображения, я получаю сообщение «Не удалось загрузить ресурс: net :: ERR_UNKNOWN_URL_SCHEME».Эта ошибка возникает только при первом запуске, когда я закрываю приложение и перезагружаю его, все работает нормально.Кроме того, когда я устанавливаю settings.setAppCacheEnabled (false), также все работает отлично.Когда я отлаживал свое приложение, я заметил, что в первый раз (когда изображения не загружены) не должны вызываться методы shouldInterceptRequest.
это мои настройки веб-просмотра:
WebSettings settings = wv.getSettings();
settings.setJavaScriptEnabled(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
wv.addJavascriptInterface(jsHandler, "cpjs");
settings.setDomStorageEnabled(true);
String PACKAGE_NAME = ctx.getPackageName();
settings.setDatabaseEnabled(true);
settings.setDatabasePath("/data/data/" + PACKAGE_NAME + "/databases/");
settings.setAppCacheMaxSize(1024 * 1024 * 16);
settings.setAppCachePath(ctx.getCacheDir().getAbsolutePath());
settings.setAllowFileAccess(true);
settings.setAppCacheEnabled(true);
settings.setLightTouchEnabled(false);
settings.setSupportZoom(false);
settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
//Allow to redirect https to http for downloading content
if (Build.VERSION.SDK_INT >= 21) {
settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
KsLog.i(TAG, "WebView settings, MIXED_CONTENT_ALWAYS_ALLOW set");
}
settings.setSavePassword(false);
settings.setLightTouchEnabled(false);
settings.setSupportZoom(false);
wv.setScrollContainer(false);
wv.setHorizontalScrollBarEnabled(false);
wv.setVerticalScrollBarEnabled(false);
wv.setLongClickable(false);
wv.cancelLongPress();
и это переопределение метода shouldInterceptRequest:
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
try {
if (url.startsWith(Constants.KS_LOCAL_PREFIX)) {
// In case url starts with our proprietary protocol handle the request.
// Images are located in the external files directory under "images" folder
String fileName = url.substring(url.lastIndexOf(Constants.URL_SLASH));
String filePath = FileUtils.getImagesLocalFolder(getAppContext()) + fileName;
File imagefile = new File(filePath);
FileInputStream fis = new FileInputStream(imagefile);
Bitmap bi = BitmapFactory.decodeStream(fis);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
if (bi != null) {
bi.compress(Bitmap.CompressFormat.PNG, 100, baos);
}
byte[] data = baos.toByteArray();
InputStream is = new ByteArrayInputStream(data);
return new WebResourceResponse("text/html", "UTF-8", is);
}
} catch (FileNotFoundException e) {
KsLog.d(TAG, e.toString());
} catch (NullPointerException nullEx) {
KsLog.d(TAG, nullEx.toString());
}
return super.shouldInterceptRequest(view, url);
}
Это пример плохогоimage:
Это пример хорошего изображения:
Спасибо всем, и я надеюсь, что я все хорошо объяснил.