Android Webview下载管理器下载PDF文件

时间:2017-01-11 08:25:38

标签: android webview

我有一个Android应用程序,它使用单个WebView加载其中的网站。

setContentView(R.layout.activity_main);
WebView webView = (WebView) this.findViewById(R.id.webview);

然后我使用下载管理器从服务器下载我的文件

webView.setDownloadListener(new DownloadListener() {

        public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
            //   ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE);
            //for downloading directly through download manager

            DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));

            request.allowScanningByMediaScanner();
            Environment.getExternalStorageDirectory();
            getApplicationContext().getFilesDir().getPath(); //which returns the internal app files directory path
            request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
            request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "download");
            DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
            dm.enqueue(request);
        }
    });

当我尝试下载由网站动态创建的文件时,我可以下载网站HTML而不是PDF。

webView.loadUrl("http://bookboon.com/");

先谢谢

1 个答案:

答案 0 :(得分:1)

实际上,HTML页面显示了用于身份验证的登录页面。因此,您需要一个会话密钥,该密钥位于该网站的cookie中。

所以你需要在onDownloadListener

中添加三行
     webView.setDownloadListener(new DownloadListener() {

                public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
                    //   ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE);
                    //for downloading directly through download manager

                    DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));

                 //This three lines will do your work

                    CookieManager cookieManager = CookieManager.getInstance();
                    String cookie = cookieManager.getCookie("<Your website url>");     // which is "http://bookboon.com"
                    request.addRequestHeader("Cookie", cookie);
                 //................................................
                    request.allowScanningByMediaScanner();
                    Environment.getExternalStorageDirectory();
                    getApplicationContext().getFilesDir().getPath(); //which returns the internal app files directory path
                    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
                    request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "download");
                    DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
                    dm.enqueue(request);
                }
            });