package com.openims.downloader; import java.io.BufferedInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; import java.util.Random; import org.apache.http.util.ByteArrayBuffer; import android.os.Handler; import android.util.Log; import com.openims.utility.LogUtil; import com.openims.view.pushContent.PushContentListFragment; /** * This is not a real download task. * It just sleeps for some random time when it's launched. * The idea is not to require a connection and not to eat it. * */ public class DownloadTask implements Runnable { private static final String TAG = LogUtil .makeLogTag(PushContentListFragment.class); private static final String LOG = "Download:"; private DownloadTaskListener listener; private Handler mainThreadHandler; private int nFinishSize = 0; private int nTotalSize = 0; // �޷���ȡ�ܴ�С private String fileUrl; private String fileName; public DownloadTask(String fileUrl,String fileName, Handler mainThreadHandler,DownloadTaskListener listener) { this.fileUrl = fileUrl; this.fileName = fileName; this.mainThreadHandler = mainThreadHandler; this.listener = listener; } @Override public void run() { try { downloadFromUrl(fileUrl, fileName); } catch (Throwable t) { Log.e(TAG, "Error in DownloadTask", t); } } public void downloadFromUrl(String imageURL, String fileName) { //this is the downloader method FileOutputStream fos = null; try { URL url = new URL(imageURL); File file = new File(fileName); fos = new FileOutputStream(file); long startTime = System.currentTimeMillis(); Log.d(TAG, LOG + "url:" + url); Log.d(TAG, LOG + "file name:" + fileName); URLConnection ucon = url.openConnection(); InputStream is = ucon.getInputStream(); BufferedInputStream bis = new BufferedInputStream(is); byte[] data = new byte[1024]; nFinishSize = 0; while( bis.read(data, 0, 1024) != -1){ fos.write(data, 0, 1024); nFinishSize += 1024; mainThreadHandler.post(new Runnable(){ @Override public void run() { listener.finish(nFinishSize, nTotalSize); } }); } Log.d(TAG, "download ready in" + ((System.currentTimeMillis() - startTime) / 1000) + " sec"); mainThreadHandler.post(new Runnable(){ @Override public void run() { listener.finish(); } }); } catch (IOException e) { Log.d(TAG, LOG + "Error: " + e); } finally{ try { if(fos != null) fos.close(); } catch (IOException e) { Log.d(TAG, LOG + "Error: " + e); e.printStackTrace(); } } } public void setListener(DownloadTaskListener listener) { this.listener = listener; } public DownloadTaskListener getListener() { return listener; } public void setMainThreadHandler(Handler mainThreadHandler) { this.mainThreadHandler = mainThreadHandler; } }