我的应用中有一个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菜单中的“下载”选项时出现?
答案 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));
}