Как сделать авто скачивание файла в webview клиенте?

Для реализации автоматического скачивания файла в WebView клиенте в Java, вам потребуется настроить WebView и обработать соответствующие события.

1. Настройка WebView:
- Создайте класс, который расширяет WebViewClient, чтобы переопределить некоторые методы, связанные с загрузкой и скачиванием файлов.
- В методе shouldOverrideUrlLoading проверьте, является ли URL файлом, и если это так, верните false, чтобы WebView не обрабатывала его и позволила системе обработать его.
- Переопределите метод onDownloadStart, в котором запустите скачивание файла при помощи Intent, используя URL файла.

Пример кода:

public class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        String url = request.getUrl().toString();
        if (url.endsWith(".pdf") || url.endsWith(".docx")) {
            return false;
        }
        return super.shouldOverrideUrlLoading(view, request);
    }

    @Override
    public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
        DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
        request.setMimeType(mimetype);
        String cookies = CookieManager.getInstance().getCookie(url);
        request.addRequestHeader("cookie", cookies);
        request.addRequestHeader("User-Agent", userAgent);
        request.setDescription("Downloading file...");
        request.setTitle(URLUtil.guessFileName(url, contentDisposition, mimetype));
        request.allowScanningByMediaScanner();
        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
        request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, URLUtil.guessFileName(url, contentDisposition, mimetype));
        DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
        assert dm != null;
        dm.enqueue(request);
        Toast.makeText(getApplicationContext(), "Downloading File", Toast.LENGTH_LONG).show();
    }
}

2. Использование WebViewClient:
- В вашей активности или фрагменте, где вы используете WebView, установите WebViewClient для вашего WebView с помощью метода setWebViewClient и передайте экземпляр вашего класса MyWebViewClient.
- Настройте WebView, чтобы разрешить работу с файлами, используя метод setDownloadListener и передайте экземпляр вашего класса MyWebViewClient.

Пример кода:

WebView webView = findViewById(R.id.webView);
webView.setWebViewClient(new MyWebViewClient());
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("http://example.com");
webView.setDownloadListener((url, userAgent, contentDisposition, mimetype, contentLength) ->
        webView.getUrl().contains(url)); // Needed to trigger download

Теперь при нажатии на ссылку на файл с расширениями .pdf или .docx, оно будет автоматически скачиваться в заданную директорию.