Android WebView - 下载 PDF 以 HTML 文件结束

kin*_*ite 2 android download webview

我尝试从网页下载 PDF 文件。但是当我这样做时,我最终只得到一个 HTML 文件,因为登录不能用于下载。

我尝试加载的链接如下所示:

https://somePage.de/auth/1%3A1%3A1026071014%3A3%3A0%3Aserv%3Ax/aufgaben/aufgabe3.pdf

解决后应该是这样的:

https://somePage.de/auth/1:1:1:122452345:4:4:serv:x/aufgaben/aufgabe3.pdf

下载由下载管理器完成:

@Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {

            Toast.makeText(getActivity(), url, Toast.LENGTH_LONG).show();
            if (url.contains(".pdf")) {
                Request request = new Request(Uri.parse(url));
                request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
                request.setDestinationInExternalPublicDir(
                        Environment.DIRECTORY_DOWNLOADS, url.substring(url.lastIndexOf("/", url.length())));
                _DownloadManager.enqueue(request);

            } else
            view.loadUrl(url);

            return true;
        }
Run Code Online (Sandbox Code Playgroud)

有什么我想念的吗?也许 WebView 中的某种配置?

kin*_*ite 5

好的,我终于找到了解决方案。问题是,下载管理器没有来自 web 视图的登录状态。对此的解决方案是向请求提供您的 cookie。这里的代码(只有两行):

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {

    Toast.makeText(getActivity(), url, Toast.LENGTH_LONG).show();

    if (url.contains(".pdf")) {

        String cookie = CookieManager.getInstance().getCookie(url);
        Request request = new Request(Uri.parse(url));
        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
        request.setDestinationInExternalPublicDir(
                Environment.DIRECTORY_DOWNLOADS, url.substring(url.lastIndexOf("/", url.length())));
        request.addRequestHeader("Cookie", cookie);
        _DownloadManager.enqueue(request);

    } else
        view.loadUrl(url);

    return true;
}
Run Code Online (Sandbox Code Playgroud)