WebView使用(2)下载文件

1,084 阅读1分钟

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();
			}
		}

	}


}


\

\