Как сохранить картинку webview?

Для сохранения картинки из WebView в Android вам потребуется реализовать несколько шагов.

1. Сначала необходимо получить URL-адрес картинки, которую вы хотите сохранить. Это можно сделать, переопределив метод shouldInterceptRequest внутри WebViewClient. В этом методе вы будете перехватывать все запросы, включая загрузку картинок. Вы можете проверить тип данных, чтобы убедиться, что это изображение, а затем получить URL, вызвав request.getUrl(). Сохраните этот URL для использования позже.

Пример кода:

WebView webView = new WebView(this);
webView.setWebViewClient(new WebViewClient() {
  @Override
  public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
    if (request.getUrl().toString().endsWith(".jpg") || request.getUrl().toString().endsWith(".png")) {
      String imageUrl = request.getUrl().toString();
      // Сохраните imageUrl для использования позже
    }
    return super.shouldInterceptRequest(view, request);
  }
});

2. Как только у вас есть URL-адрес картинки, вы можете использовать его для загрузки картинки с помощью HttpURLConnection или библиотеки, такой как Picasso или Glide. Затем получите байты изображения и сохраните их на устройство в локальное хранилище.

Пример кода с использованием библиотеки Picasso:

String imageUrl = "https://example.com/image.jpg";
Picasso.get().load(imageUrl).into(new Target() {
  @Override
  public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
    // Сохраните bitmap на устройстве
  }

  @Override
  public void onBitmapFailed(Exception e, Drawable errorDrawable) {
    // Обработайте ошибку, если не удалось загрузить картинку
  }

  @Override
  public void onPrepareLoad(Drawable placeHolderDrawable) {
    // Опционально: выполните какие-либо действия перед загрузкой картинки
  }
});

3. Чтобы сохранить изображение на устройство, вам понадобятся разрешения WRITE_EXTERNAL_STORAGE или MEDIA_CONTENT_CONTROL, в зависимости от SDK вашего приложения. Убедитесь, что у вас есть соответствующие разрешения в файле манифеста приложения <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />. Затем используйте методы Java для сохранения байтов битмапа в файл.

Пример кода:

String imageName = "image.jpg";
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), imageName);

try {
  FileOutputStream fos = new FileOutputStream(file);
  bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
  fos.flush();
  fos.close();
  // Изображение успешно сохранено
} catch (Exception e) {
  e.printStackTrace();
  // Обработайте ошибку, если не удалось сохранить изображение
}

Запомните, что приложение должно получить разрешение пользователя для доступа к файловой системе устройства. Если ваше приложение работает на Android 10 или более поздних версиях, вам также потребуется использовать Storage Access Framework для сохранения файлов в публичном каталоге.