public class DownloadUtil {    public static final int DOWNLOAD_FAIL=0;    public static final int DOWNLOAD_PROGRESS=1;    public static final int DOWNLOAD_SUCCESS=2;    private static DownloadUtil downloadUtil;    private final OkHttpClient okHttpClient;    public static DownloadUtil getInstance() {        if (downloadUtil == null) {            downloadUtil = new DownloadUtil();        }        return downloadUtil;    }    private DownloadUtil() {        okHttpClient = new OkHttpClient();    }    /**     *     */    public void download(final String url,final String saveDir,final OnDownloadListener listener){        this.listener=listener;        Request request=new Request.Builder().url(url).build();        okHttpClient.newCall(request).enqueue(new Callback() {            @Override            public void onFailure(Call call, IOException e) {                Message message=Message.obtain();                message.what=DOWNLOAD_FAIL;                mHandler.sendMessage(message);            }            @Override            public void onResponse(Call call, Response response) throws IOException {                InputStream is=null;                byte[] buf=new byte[2048];                int len=0;                FileOutputStream fos=null;                //储存下载文件的目录                String savePath=isExistDir(saveDir);                File file=new File(savePath,getNameFromUrl(url));                if (file.exists()){                    file.delete();                }                try{                    is=response.body().byteStream();                    long total=response.body().contentLength();                    File file2=new File(savePath,getNameFromUrl(url));                    fos=new FileOutputStream(file2);                    long sum=0;                    while((len = is.read(buf))!=-1){                        fos.write(buf,0,len);                        sum+=len;                        int progress=(int)(sum*100/total);                        //下载中                        Message message=Message.obtain();                        message.what=DOWNLOAD_PROGRESS;                        message.obj=progress;                        mHandler.sendMessage(message);                    }                    fos.flush();                    //下载完成                    Message message=Message.obtain();                    message.what=DOWNLOAD_SUCCESS;                    message.obj=file.getAbsolutePath();                    mHandler.sendMessage(message);                }catch (Exception e){                    Message message=Message.obtain();                    message.what=DOWNLOAD_FAIL;                    mHandler.sendMessage(message);                }finally{                    try{                        if(is!=null)                            is.close();                    }catch (IOException e){                    }                    try {                        if(fos!=null){                            fos.close();                        }                    }catch (IOException e){                    }                }            }        });    }    private String getNameFromUrl(String url) {        return url.substring(url.lastIndexOf("/")+1);    }    private String isExistDir(String saveDir) throws IOException {        File downloadFile=new File(saveDir);        if(!downloadFile.mkdirs()){            downloadFile.createNewFile();        }        String savePath=downloadFile.getAbsolutePath();        return savePath;    }    private Handler mHandler=new Handler(){        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            switch (msg.what){                case DOWNLOAD_PROGRESS:                    listener.onDownloading((Integer) msg.obj);                    break;                case DOWNLOAD_FAIL:                    listener.onDownloadFailed();                    break;                case DOWNLOAD_SUCCESS:                    listener.onDownloadSuccess((String) msg.obj);                    break;            }        }    };    OnDownloadListener listener;    public interface OnDownloadListener{        /**         * 下载成功         */        void onDownloadSuccess(String path);        /**         * 下载进度         * @param progress         */        void onDownloading(int progress);        /**         * 下载失败         */        void onDownloadFailed();    }}

更多相关文章

  1. android中进度条和选项卡的使用
  2. 使用Android新式LruCache缓存图片,基于线程池异步加载图片
  3. android studio 57 MP3 音乐播放器 下载网络歌曲 代码
  4. Android文件下载程序例子
  5. NDK旧版本下载地址
  6. android中自定义进度条风格
  7. android 多线程并发下载文件
  8. android 实现图片加载效果
  9. Android文件下载

随机推荐

  1. Android常用的intent action汇总
  2. android-pluginmgr不需要插件规范的apk动
  3. Log分析
  4. Android之ArrayAdapter用法总结
  5. LXR 索引Android 源码
  6. 专题 - Web应用
  7. App测试中ios和Android的区别
  8. Android隐藏输入法自带的输入框,将输入框
  9. Android Intent调用方法总结
  10. Android拍照,照片会自己旋转