Android编程使用WebView实现文件下载功能的两种方法
作者:迟做总比不做强 时间:2022-12-16 20:20:14
本文实例讲述了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程序设计有所帮助。
来源:http://blog.csdn.net/true100/article/details/50373295
标签:Android,WebView,文件下载
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
javafx实现时钟效果
2022-09-10 02:23:31
![](https://img.aspxhome.com/file/2023/6/88196_0s.jpg)
详解Java volatile 内存屏障底层原理语义
2023-05-08 19:25:47
![](https://img.aspxhome.com/file/2023/5/116225_0s.png)
简单了解JAVA public class与class区别
2023-11-15 23:59:26
![](https://img.aspxhome.com/file/2023/5/59675_0s.png)
Java线程间的通信方式详解
2022-05-20 10:33:47
详解如何使用maven生成可以执行的jar
2023-08-17 00:18:43
SpringBoot 项目中创建线程池
2023-09-21 22:12:04
c#使用反射调用类型成员示例
2023-02-27 08:54:43
Flutter Navigator路由传参的实现
2021-12-10 04:46:58
使用IntelliJ IDEA 配置安卓(Android)开发环境的教程详解(新手必看)
2021-10-22 19:11:28
![](https://img.aspxhome.com/file/2023/9/130319_0s.png)
Android 属性动画ValueAnimator与插值器详解
2023-04-12 19:05:33
Java实现年兽大作战游戏详解
2023-11-08 04:28:05
![](https://img.aspxhome.com/file/2023/5/58875_0s.jpg)
Android PopUpWindow使用详解
2023-06-30 06:33:11
![](https://img.aspxhome.com/file/2023/6/96806_0s.png)
Java基于分治法实现的快速排序算法示例
2023-12-15 07:39:06
![](https://img.aspxhome.com/file/2023/2/66642_0s.jpg)
C# .NET 中的缓存实现详情
2023-05-30 18:35:12
C# 4.0 大数的运算--BigInteger的应用详解
2022-02-02 06:40:05
![](https://img.aspxhome.com/file/2023/2/74832_0s.png)
在Maven下代理服务器设定的方式
2023-10-15 02:17:13
![](https://img.aspxhome.com/file/2023/9/58569_0s.png)
SpringBoot登录用户权限拦截器
2022-07-15 04:18:04
android 选项卡(TabHost)如何放置在屏幕的底部
2023-07-09 21:19:59
JavaWeb项目Servlet无法访问问题解决
2022-10-10 03:33:52
Android 中启动自己另一个程序的activity如何实现
2022-05-17 05:24:56