Cómo Descargar Imágenes desde un WebView en Android

En este tutorial, aprenderás cómo descargar imágenes desde un WebView en Android cuando se realiza una pulsación larga en la imagen. Utilizaremos código Java para lograr esta funcionalidad.

  •  Estos códigos se utilizan cuando se desea insertar una pulsación larga en la imagen para descargar desde un WebView.
  • Pega el siguiente código en onCreate


  • Cambia webview1 por el ID de tu WebView
webview1.getSettings().setJavaScriptEnabled(true);
webview1.setWebViewClient(new WebViewClient());
registerForContextMenu(webview1);

// Carga la página deseada en el WebView
webview1.loadUrl("https://www.google.com");

  • A continuación, el código descargará imágenes en una carpeta llamada "Webview/Download".


@Override
public void onCreateContextMenu(ContextMenu contextMenu, View view, ContextMenu.ContextMenuInfo contextMenuInfo) {
  super.onCreateContextMenu(contextMenu, view, contextMenuInfo);
  final WebView.HitTestResult webViewHitTestResult = webview1.getHitTestResult();

  if (webViewHitTestResult.getType() == WebView.HitTestResult.IMAGE_TYPE || webViewHitTestResult.getType() == WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {
    contextMenu.setHeaderTitle("Descargar imagen");
    contextMenu.add(0, 1, 0, "Guardar - Descargar imagen")
      .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem menuItem) {
          String DownloadImageURL = webViewHitTestResult.getExtra();

          if (URLUtil.isValidUrl(DownloadImageURL)) {
            DownloadManager.Request request = new DownloadManager.Request(Uri.parse(DownloadImageURL));
            request.allowScanningByMediaScanner();
            request.setTitle("download.png");
            request.setDestinationInExternalPublicDir("/Webview/Download", "download.png");
            request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);

            DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
            downloadManager.enqueue(request);
            Toast.makeText(MainActivity.this, "Descarga completa", Toast.LENGTH_LONG).show();
          } else {
            Toast.makeText(MainActivity.this, "Lo sentimos... Algo salió mal.", Toast.LENGTH_LONG).show();
          }
          return false;
        }
      });
  }
}

if (webview1.canGoBack())
  webview1.goBack();
else
  super.onBackPressed();

  • Coloca estos bloques y crea una condición para verificar si el directorio "Webview/Download" existe. Si existe, no haga nada; si no existe, crea el directorio o carpeta.