Для сохранения картинки из 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 для сохранения файлов в публичном каталоге.