天天看點

android下載下傳apk 斷點續傳

class InitThread extends Thread {

            @Override

            public void run() {   

                HttpURLConnection httpconn =null ;

                try{

                    URL url = new URL(UPDATE_DOWNURL);

                    httpconn = (HttpURLConnection) url

                            .openConnection();

                    httpconn.setRequestMethod("GET");

                    httpconn.connect();

                    length=-1;

                    if (httpconn .getResponseCode() == HttpStatus.SC_OK) {

                        length = httpconn.getContentLength();

                    }

                    if (length <=0) {

                        return;

                    }

                    handler.sendEmptyMessage(0);

                }catch(Exception ex){

                    ex.printStackTrace();

                }finally{

                    try {

                        httpconn.disconnect();

                    } catch (Exception e) {

                        e.printStackTrace();

                    }

                }

            }

        };

        new InitThread().start();

        handler = new Handler() {

            @Override

            public void handleMessage(Message msg) {

                new Thread() {

                    private long finishedCount = 0; // 已經下載下傳的

                    @Override

                    public void run() {

                        FileOutputStream fos = null;

                        InputStream is = null;

                        try {

                            isLoading  = true;

                            File ApkFile = new File(savefolder, UPDATE_SAVENAME);

                            long size = AppUtil.getFileSize(ApkFile);

                            if(size >= length) {

                                if (ApkFile.exists()) {

                                    ApkFile.delete();

                                    size = 0;

                                    Log.e("downloadsizes", "-----!!!---------------delete=");

                                }

//                                fos = new FileOutputStream(ApkFile, false);

                            } else {

//                                fos = new FileOutputStream(ApkFile, true);

                            }

                            Log.e("downloadsizes", "-----!!!---------------size=" + size);

                            fos = new FileOutputStream(ApkFile, true);

//                            String value = Reader.readFromSharedPreferences(ctx, "downloadsizes");

//                            Log.e("downloadsizes", "-----!!!---------------value=" + value);

//

//                            if (value != null && value.length() > 0) {

//                                lastFinished = Long.parseLong(value);

//                                Log.e("lastFinished", "-----!!!---------------lastFinished=" + lastFinished);

//                            } else {

//                                if (ApkFile.exists()) {

//                                    ApkFile.delete();

//                                }

//                                Writer.writeToSharedPreferences(ctx, "downloadsizes", String.valueOf(0));

//                            }

                            URL url = new URL(UPDATE_DOWNURL);

                            HttpURLConnection conn = (HttpURLConnection) url

                                    .openConnection();

                            conn.setRequestProperty("Range", "bytes=" + size + "-");

                            conn.connect();

                            Log.e("length", "-----!!!---------------length=" + length);

                            is = conn.getInputStream();

                            int len = -1;

                            finishedCount = size;

                            byte buf[] = new byte[1024];

                            //is.skip(size);

                            while ((len = is.read(buf)) != -1 && !canceled){

                                finishedCount += len;

                                Log.e("len", "-----!!!---------------len=" + len);

                                Log.e("count", "-----!!!---------------count=" + finishedCount);

                                int percent = (int) ((float) finishedCount * 100 / length);

//                                if (percent != progress) {

                                    progress = percent;

//                                    Writer.writeToSharedPreferences(ctx, "downloadsizes", String.valueOf(count));

                                    updateHandler.sendMessage(updateHandler

                                            .obtainMessage(UPDATE_DOWNLOADING));

//                                }

                                fos.write(buf, 0, len);

                            }

                            fos.close();

                            is.close();

                            updateHandler.sendEmptyMessage(UPDATE_DOWNLOAD_COMPLETED);

                            if (canceled) {

                                isLoading = false;

//                                Writer.writeToSharedPreferences(ctx, "downloadsizes", String.valueOf(count));

                                updateHandler

                                        .sendEmptyMessage(UPDATE_DOWNLOAD_CANCELED);

                            }

                            isLoading = false;

                        } catch (MalformedURLException e) {

                            e.printStackTrace();

//                            Writer.writeToSharedPreferences(ctx, "downloadsizes", String.valueOf(count));

                            updateHandler.sendMessage(updateHandler.obtainMessage(

                                    UPDATE_DOWNLOAD_ERROR, e.getMessage()));

                        } catch (IOException e) {

                            e.printStackTrace();

//                            Writer.writeToSharedPreferences(ctx, "downloadsizes", String.valueOf(count));

                            updateHandler.sendMessage(updateHandler.obtainMessage(

                                    UPDATE_DOWNLOAD_ERROR, e.getMessage()));

                        } finally {

                            isLoading = false;

                            try {

                                fos.close();

                                is.close();

                            } catch (IOException e) {

                                e.printStackTrace();

                            }

                        }

                    }

                }.start();

            }

        };

繼續閱讀