在应用中,通常会使用到文件下载功能,一般我们都是写一个下载操作工具类,在异步任务中执行下载功能。 今天我们来看下如何使用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);

}

});

使用WebView实现文件下载的两种方式相关推荐

  1. PHP实现文件下载的两种方式(GuzzleHttp和Curl)

    PHP实现文件下载的两种方式分别使用GuzzleHttp扩展和Curl扩展来实现.本例以下载PDF文件为例,实际上大家可以举一反三下载其他文件格式是一样的. 1.使用GuzzleHttp 扩展库 us ...

  2. java下文_java实现文件下载的两种方式

    本文实例为大家分享了java实现文件下载的具体代码,供大家参考,具体内容如下 public HttpServletResponse download(String path, HttpServletR ...

  3. java实现文件下载的两种方式6_struts2实现文件下载功能

    本文实例为大家分享了struts2下实现文件下载功能,供大家参考,具体内容如下 下面以实现一个图片下载功能为例: 1. 项目结构 2. web.xml xmlns="http://java. ...

  4. android webview打开pdf 的两种方式

    方法1:利用设备自带浏览器打开pdf private void loadPDF1(){ mWebView.getSettings().setJavaScriptEnabled(true); mWebV ...

  5. react 调用 html5,React-Native Webview 和H5交互的两种方式

    React-Native WebView 和H5交互有两种方式: 方式1:RN Webview 向H5注入JS 此方式可作为Webview向H5端传递数据. RN Webview 有以下属性,可以注入 ...

  6. springmvc和servlet在上传和下载文件(保持文件夹和存储数据库Blob两种方式)

    参与该项目的文件上传和下载.一旦struts2下完成,今天springmvc再来一遍.发现springmvc特别好包,基本上不具备的几行代码即可完成,下面的代码贴: FileUpAndDown.jsp ...

  7. iOS WKWebView和JS交互的两种方式

    2019独角兽企业重金招聘Python工程师标准>>> 本文介绍两种方式实现iOS WKWebView和JS交互 WKWebViewConfiguration注入WKScriptMe ...

  8. android 打开网页的两种方式.

    有时候我们要在自己的应用中打开一个网页. 这是本人用到 的两种方式. 1.  网页放置于自己的ACTIVITY              1.1 在资源文件中申明WIDGET <WebView ...

  9. [Java中实现Excel表导入导出]基于easy-poi和EasyExcel两种方式实现

    第一种:基于easy-poi实现Excel导入导出 1.导出Excel表格 第一步:在pom文件中导入依赖 <!--基于easy-poi实现Excel导入导出--><dependen ...

最新文章

  1. c++的:: . :-的区别
  2. PHP设计模式 外观模式(Facade)
  3. Gson解析JSON数据中动态未知字段key的方法
  4. 51单片机系列命名规则
  5. 春运前五日全国累计发送旅客3.49亿人次 同比增0.58%
  6. 【Transformer】SMCA: Fast Convergence of DETR with Spatially Modulated Co-Attention
  7. python 基础 - 循环语句
  8. ApacheCN Angular 译文集 20211114 更新
  9. python画spc控制图_SPC控制图的制作方法和步骤
  10. 工程数学线性代数 同济大学版 第六版 课后习题答案 高等数学 大学数学 线性代数 课后题答案与解析 考试复习提纲
  11. 【教程】生态环境影响评价技术应用及典型实践案例分析
  12. 自制狂拍灰太狼小游戏(HTML+CSS+JavaScript)
  13. 让你的网站用上炫酷的中文字体
  14. delphi在linux运行,实现了delphi unigui跑在linux上
  15. 文件同步工具CwRsync的使用教程
  16. 2022年的1024
  17. 家庭mesh组网方案
  18. 微服务之springCloud-docker-comsumer(三)
  19. 半定制器件课程设计——基于FPGA的PS2键盘人机输入显示系统
  20. 移动互联网你需要了解35家潜力企业

热门文章

  1. ssm上传图片文件到ftp(图片压缩处理)
  2. 飞秋源码 java_飞秋源码下载 java
  3. Attack on Titan(状态压缩)
  4. 分析国家统计局行政区划代码(省市区数据)生成SQL
  5. OpenCV中parallel_for 和 parallel_for_学习笔记
  6. php-fpm进程数优化
  7. carla官方文档笔记1
  8. Stimulsoft Forms.WEB 23.2.6 Crack
  9. 抛物样条曲线(最详细简单的解析)
  10. 数据结构期末复习(4.二叉树的遍历)