Android编程使用WebView实现文件下载功能的两种方法

 更新时间:2018年02月13日 09:58:20   作者:迟做总比不做强  
这篇文章主要介绍了Android编程使用WebView实现文件下载功能的两种方法,涉及Android基于WebView的相关文件传输与线程操作技巧,需要的朋友可以参考下

本文实例讲述了Android编程使用WebView实现文件下载功能的两种方法。分享给大家供大家参考,具体如下:

在应用中,通常会使用到文件下载功能,一般我们都是写一个下载操作工具类,在异步任务中执行下载功能。

今天我们来看下如何使用WebView的文件下载功能!

方法1,自定义下载操作

1. 先来布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:ldm="http://schemas.android.com/apk/res/com.ldm.learn"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<WebView
android:id="@+id/test_wv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="15dp" />
</RelativeLayout>

2. 实现自定义下载工具操作异步线程类:

public class DownLoadThread extends Thread {
private String downLoadUrl;
private Context context;
private FileOutputStream out = null;
private File downLoadFile = null;
private File sdCardFile = null;
private InputStream in = null;
public DownLoadThread(String downLoadUrl, Context context) {
super();
this.downLoadUrl = downLoadUrl;
this.context = context;
}
@Override
public void run() {
try {
URL httpUrl = new URL(downLoadUrl);
HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection();
 conn.setDoInput(true);// 如果打算使用 URL 连接进行输入,则将 DoInput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 true。
conn.setDoOutput(true);// 如果打算使用
 URL 连接进行输出,则将 DoOutput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 false。
in = conn.getInputStream();
if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
 Toast.makeText(context, "SD卡不可用!", Toast.LENGTH_SHORT).show();
return;
}
downLoadFile = Environment.getExternalStorageDirectory();
sdCardFile = new File(downLoadFile, "download.apk");
out = new FileOutputStream(sdCardFile);
byte[] b = new byte[1024];
int len;
while ((len = in.read(b)) != -1) {
out.write(b, 0, len);
}
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
}
catch (Exception e) {
e.printStackTrace();
}
 }
}

3. 文件下载

public class MainActivity extends Activity {
private WebView test_wv;
private String downLoadUrl = "http://as.baidu.com/a/rank?cid=101&s=1&f=web_alad";
 @Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.test_wv
 = (WebView) findViewById(R.id.test_wv);
test_wv.loadUrl(downLoadUrl);
test_wv.setWebViewClient(new WebViewClient()
 {
@Override
public boolean shouldOverrideUrlLoading(WebView
 view, String url) {
view.loadUrl(url);
return super.shouldOverrideUrlLoading(view, url);
}
});
//要实现WebView文件下载,实现这个监听就ok
test_wv.setDownloadListener(new
 DownloadListener() {
@Override
public void onDownloadStart(String
 url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
Log.v("ldm", url);
if (url.endsWith(".apk")) {//判断是否是.apk结尾的文件路径
new DownLoadThread(url, MainActivity.this).start();
}
}
});
}
}

方法2:通过系统自身下载方式下载(会在通知栏显示下载进度条)

只需要把这个方法改写如下:

test_wv.setDownloadListener(new
 DownloadListener() {
@Override
public
 void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
Log.v("ldm",
 url);
Uri
 uri=Uri.parse(url);
Intent
 intent=new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
});

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android文件操作技巧汇总》、《Android视图View技巧总结》、《Android编程之activity操作技巧总结》、《Android布局layout技巧总结》、《Android开发入门与进阶教程》、《Android资源操作技巧汇总》及《Android控件用法总结

希望本文所述对大家Android程序设计有所帮助。

相关文章

  • Android判断网络类型的方法(2g,3g还是wifi)

    Android判断网络类型的方法(2g,3g还是wifi)

    这篇文章主要介绍了Android判断网络类型的方法,可实现判断2g,3g还是wifi的功能,结合实例形式分析了Android针对网络类型的相关判定技巧,需要的朋友可以参考下
    2016-02-02
  • RxJava构建流基本原理示例解析

    RxJava构建流基本原理示例解析

    这篇文章主要为大家介绍了RxJava构建流基本原理示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Android开发悬浮窗踩坑解决

    Android开发悬浮窗踩坑解决

    这篇文章主要为大家介绍了Android悬浮窗踩坑解决示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Android同时安装Release和Debug版本的方法

    Android同时安装Release和Debug版本的方法

    这篇文章主要介绍了Android同时安装Release和Debug版本的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • 详解Flutter中的数据传递

    详解Flutter中的数据传递

    这篇文章主要介绍了Flutter中的数据传递的相关资料,帮助大家更好的理解和学习使用Flutter,感兴趣的朋友可以了解下
    2021-04-04
  • android开发之欢迎界面的小例子

    android开发之欢迎界面的小例子

    android开发之欢迎界面的小例子,需要的朋友可以参考一下
    2013-06-06
  • android实现背景音乐播放功能

    android实现背景音乐播放功能

    这篇文章主要为大家详细介绍了android实现背景音乐播放功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Android Scroller的使用方法

    Android Scroller的使用方法

    这篇文章主要为大家详细介绍了Android Scroller的使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • Android仿IOS UIAlertView对话框

    Android仿IOS UIAlertView对话框

    这篇文章主要为大家详细介绍了Android仿IOS UIAlertView对话框,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • Android仿String的对象驻留示例分析

    Android仿String的对象驻留示例分析

    这篇文章主要介绍了Android仿String的对象驻留,较为详细的分析说明了对象驻留的概念及Android实现仿String对象驻留的相关技巧,需要的朋友可以参考下
    2015-12-12

最新评论