下载到Android下载文件夹

时间:2014-02-21 10:28:11

标签: android

我的应用中有一个webview。我的一个页面有一个mp3的链接,我应该直接从我的应用程序下载,所以使用这样的downloadlistener:

mWebView.setDownloadListener(new DownloadListener() {


            public void onDownloadStart(String url, String userAgent,
                    String contentDisposition, String mimetype,
                    long contentLength) {



              Intent i = new Intent(Intent.ACTION_VIEW);
              i.setData(Uri.parse(url));
              startActivity(i);
            }
        });

对我不好,因为它在实际下载文件之前启动了默认浏览器。

我有没有办法自行管理下载到操作系统下载文件夹,以便当用户进入Android菜单中的“下载”选项时出现?

3 个答案:

答案 0 :(得分:0)

尝试使用像这样的异步任务

mWebView.setDownloadListener(new DownloadListener() {

        public void onDownloadStart(String url, String userAgent,
                String contentDisposition, String mimetype,
                long contentLength) {
       new MyDowloadTask().execute(url);
        }
    });

public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) { new MyDowloadTask().execute(url); } });

MyDownload任务的doInBackground方法是这样的:

请参阅http://www.androidsnippets.com/download-an-http-file-to-sdcard-with-progress-notification

答案 1 :(得分:0)

您可以通过不使用DownloadListener来实现。您只需要覆盖WebViewClient的onPageFinished。检查内容类型是否为“application / octet-stream”..然后通过InputStream处理下载。创建文件,保存然后打开。 :)

答案 2 :(得分:0)

您可以自行下载到请求文件的下载目录,并将其存储到Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);

这里有一些非功能性伪代码可以帮助你(但可能会要求你捕获异常并给出错误,在UI线程上不会发生任何网络活动;所以你必须将它嵌入AsyncTask中Matthew Fisher建议)。

public void onDownloadStart(String url, String userAgent,
    String contentDisposition, String mimetype, long contentLength) 
{
    // Define where we want the output file to go
    File fileOut = new File(
        Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),
        "Filename.zip"
    );

    // Request it from the interwebz.
    HttpClient android = AndroidHttpClient.newInstance(userAgent);
    HttpResponse fileResponse = android.execute(new HttpGet(url));

    // Write the response to the file
    fileResponse.getEntity().writeTo(new FileOutputStream(fileOut));
}