WebView download 文件

本文介绍两种在Android设备上实现音乐文件下载的方法。一种是利用WebView结合自定义的DownLoadWebViewClient来下载MP3文件,并通过Service进行后台下载。另一种是通过设置WebView的DownloadListener来触发系统默认的下载行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一种:


android自带播放器支持“边下载边播放”的功能,当你使用系统浏览器点击一个“MP3的下载链接”时,它就会自动播放这首歌曲并保存到本地(不知道用第三方浏览器是否也如此,笔者认为应该是系统浏览器会自动识别MP3下载链接,并调用系统播放器来播放)。


  与这个过程类似,在笔者做的音乐播放器中,当用户选择“歌曲下载”时,会转到一个webview中,这里我将webview的初始url定向到“自定义”当点击MP3的下载链接时,就会将音乐下载到sdcard的根目录。webview所在 activity的代码如下:

Java代码:
  1. setContentView(R.layout.web);
  2. web = (WebView)findViewById(R.id.web);
  3. web.setWebViewClient(new DownLoadWebViewClient(this));
  4. WebSettings s = web.getSettings();

  5. s.setSaveFormData(false);
  6. s.setSavePassword(false);
  7. s.setUseWideViewPort(true);
  8. s.setJavaScriptEnabled(true);
  9. s.setLightTouchEnabled(true);

  10. web.setWebChromeClient(new WebChromeClient() {
  11. public void onProgressChanged(WebView view, int progress) {
  12. //Activity和Webview根据加载程度决定进度条的进度大小
  13. //当加载到100%的时候 进度条自动消失
  14. context.setProgress(progress * 100);
  15. }

  16. });
  17. web.loadUrl("http://www.top100.cn/");
复制代码
web.setWebViewClient(new DownLoadWebViewClient(this));其中DownLoadWebViewClient就使我们下载MP3文件的关键,它继承自 WebViewClient,这里我们Override它的public boolean shouldOverrideUrlLoading(WebView view, String url)方法,在方法中我们判断点击的链接时否为“下载MP3文件”,如果成立,则启动一个service来下载mp3文件,代码如下:

Java代码:

  1. public class DownLoadWebViewClient extends WebViewClient {
  2. private Context context;
  3. public DownLoadWebViewClient(Context context){
  4. this.context = context;
  5. }

  6. @Override
  7. public boolean shouldOverrideUrlLoading(WebView view, String url) {
  8. Log.i("info", "open an url");
  9. String urlStr = "";
  10. //存放解码后的url
  11. //如果是utf8编码

  12. if (isUtf8Url(url)){
  13. urlStr = Utf8URLdecode(url);
  14. //如果不是utf8编码
  15. } else {
  16. urlStr = URLDecoder.decode(url);
  17. }

  18. //如果链接是下载top100.cn中的mp3文件
  19. if (url.substring(url.length()-4).equals(".mp3")&&url.substring(7,10).equals("221")){
  20. Log.i("info", "mp3 file");
  21. String ss[] = urlStr.split("/");
  22. String musicName = ss[ss.length-1]; //得到音乐文件的全名(包括后缀)
  23. Log.i("info", "musicfile: " + musicName);
  24. //将下载链接和文件名传递给下载模块
  25. Intent intent = new Intent(context,DownLoadService.class);
  26. intent.putExtra("url", url);
  27. intent.putExtra("musicName", musicName);
  28. context.startService(intent);
  29. }
  30. return super.shouldOverrideUrlLoading(view, url);

  31. }
复制代码
这里略去了url解码的相关方法。其中DownLoadService用于下载MP3文件并在,它接收DownLoadWebViewClient传递来的url和音乐文件名,代码如下:

Java代码:

  1. public class DownLoadService extends Service implements Runnable{ //实现Runable接口

  2. private String URL_str; //网络歌曲的路径
  3. private File download_file; //下载的文件
  4. private int total_read = 0; //已经下载文件的长度(以字节为单位)
  5. private int readLength = 0; //一次性下载的长度(以字节为单位)
  6. private int music_length = 0; //音乐文件的长度(以字节为单位)
  7. private boolean flag = false; //是否停止下载,停止下载为true
  8. private Thread downThread; //下载线程
  9. private String musicName; //下载的文件名

  10. @Override
  11. public IBinder onBind(Intent intent) {
  12. return null;
  13. }

第二种:


  在做美图欣赏Android应用的时候,其中有涉及到Android应用下载的功能,这个应用本身其实也比较简单,就是通过WebView控制调用相应的WEB页面进行展示。刚开始以为和普通的文件下载实现,只需要一个链接,然后点击就可以实现下载了,可是放到手机上试的时候,点击下载链接一点反应都没有,在普通页面里面点击是好的,且点击其它的普通链接是可以正常工作的。原来是因为WebView默认没有开启文件下载的功能,如果要实现文件下载的功能,需要设置WebView的DownloadListener,通过实现自己的DownloadListener来实现文件的下载。具体操作如下:

    1、设置WebView的DownloadListener:

    webView.setDownloadListener(new MyWebViewDownLoadListener());

    2、实现MyWebViewDownLoadListener这个类,具体可以如下这样:    

  1. private class MyWebViewDownLoadListener implements DownloadListener {  
  2.   
  3.         @Override  
  4.         public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype,  
  5.                                     long contentLength) {  
  6.             Uri uri = Uri.parse(url);  
  7.             Intent intent = new Intent(Intent.ACTION_VIEW, uri);  
  8.             startActivity(intent);  
  9.         }  
  10.   
  11.     }  
    这只是调用系统中已经内置的浏览器进行下载,还没有WebView本身进行的文件下载,不过,这也基本上满足我们的应用场景了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值