将文件下载到Android WebView(代码中没有下载事件或HTTPClient)

时间:2011-12-07 18:28:21

标签: android webview

这更多的是出于好奇而不是需要解决的真正问题。我制作了一个包含WebView的Android应用程序。我使用了should override URL方法,以便在WebView中打开任何单击的链接。

后来我决定将文件从服务器下载到用户设备。不幸的是我以前没见过setDownloadListener方法。当用户现在单击链接时,不会启动下载。

据我所知,我需要使用适当的代码更新应用程序,即下载监听器或HttpClient,这没关系。

(冒着听起来像白痴的风险)我想知道,有没有办法通过服务器的动作我可以让WebView下载文件而不需要更改代码?

我猜这个功能不在WebView中,这可能是WebView打开浏览器下载文件的原因。只是想想也许我错过了一些让它成功的东西。我对此很新。

2 个答案:

答案 0 :(得分:3)

您应该可以通过webview JavascripInterface在android中使用DownloadManager发布下载。到目前为止,我自己都在尝试这个并没有成功。我可能在webview和DownloadManager正在运行的上下文中遇到问题。如果能够工作,我会带回一些代码:)

更新:

以下代码对我来说效果很好。您可以使用以下内容:(只是要知道您只能使用Android 2.3中的DownloadManager)

myWebView.setWebViewClient(new WebViewClient() {
        @Override
        public void onReceivedError(WebView view, int errorCode,
            String description, String failingUrl) {
                Log.d("WEB_VIEW_TEST", "error code:" + errorCode + " - " + description);
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
                // handle different requests for different type of files
                // this example handles downloads requests for .apk and .mp3 files
                // everything else the webview can handle normally
                if (url.endsWith(".apk")) {
                    Uri source = Uri.parse(url);
                    // Make a new request pointing to the .apk url
                    DownloadManager.Request request = new DownloadManager.Request(source);
                    // appears the same in Notification bar while downloading
                    request.setDescription("Description for the DownloadManager Bar");
                    request.setTitle("YourApp.apk");
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
                        request.allowScanningByMediaScanner();
                        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
                    }
                    // save the file in the "Downloads" folder of SDCARD
                    request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "SmartPigs.apk");
                    // get download service and enqueue file
                    DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
                    manager.enqueue(request);
                }
                else if(url.endsWith(".mp3")) {
                    // if the link points to an .mp3 resource do something else
                }
                // if there is a link to anything else than .apk or .mp3 load the URL in the webview
                else view.loadUrl(url);
                return true;                
        }
    });

在上面的代码中,我管理.apk文件,.mp3文件的链接,所有其他链接将由webview处理(普通HTML页面)

答案 1 :(得分:1)

我认为webview将仅下载并呈现text / html内容和multiparts。其余的将被导向您正在看的下载客户端。

  • Herojit