WebView使用(2)下载文件
\
下载时 使用WebVew, 设置下载监听
webView.setDownloadListener(new MyDownLoad());
在监听对象中进行下载处理
\
HttpUtils工具类
通过url ,获取网络连接HttpUrlConnection 进而获取输入输出流,
package com.example.webviewdemo;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.os.Environment;
import android.util.Log;
public class HttpDownThread implements Runnable{
public String url;
public HttpDownThread(String url){
this.url = url;
}
@Override
public void run() {
downLoad();
}
public void downLoad() {
try {
URL httpUrl = new URL(url);
HttpURLConnection httpConnection
= (HttpURLConnection) httpUrl.openConnection();
httpConnection.setDoInput(true);
httpConnection.setDoOutput(true);
//获取网络文件输入流
InputStream in = httpConnection.getInputStream();
byte[] bs = new byte[1024];
int len = 0;
//将下载的文件写道sd卡上
FileOutputStream fos = null;
//判断sd卡是否挂载可用
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
//存储的位置
File outfile = new File(Environment.getExternalStorageDirectory(), "test.apk");
fos = new FileOutputStream(outfile);
//读取网络数据
while((len = in.read(bs)) != -1){
fos.write(bs, 0, len);
}
if(fos != null){
fos.close();
}
if(in != null){
in.close();
}
}else {
Log.i("tag", "sd卡为挂载,无法使用");
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
逻辑代码:
package com.example.webviewdemo;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.webkit.DownloadListener;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;
public class MainActivity extends Activity {
WebView webView;
TextView tv_title;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView) findViewById(R.id.webView1);
tv_title = (TextView) findViewById(R.id.title_tv);
//如果直接加在uri
webView.loadUrl("http://shouji.baidu.com/");
webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
tv_title.setText(title);
}
});
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
Log.i("tag", "。。。"+url);
webView.loadUrl(url);
return super.shouldOverrideUrlLoading(view, url);
}
});
//设置下载监听
webView.setDownloadListener(new MyDownLoad());
}
/**
* 刷新
* @param v
*/
public void onRefalsh(View v){
webView.reload();
}
public void onBack(View v) {
}
/**
* 下载
* @author Administrator
*
*/
class MyDownLoad implements DownloadListener {
@Override
public void onDownloadStart( String url, String userAgent,
String contentDisposition, String mimetype, long contentLength) {
if(url.endsWith(".apk")){
/**
* 抵用系统浏览器下载apk
*/
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
new Thread(new HttpDownThread(url)).start();
}
}
}
}
\
\