Надо ввести переменную - сколько фактически байт считано. Изменяться она у тебя будет с шагом в 1024 (размер буфера), инкремент производится после вызова out.write() - так надежнее. (Мало ли в файл не записалось).
При нажатии стоп - просто прекращаешь даунлоад. Можно ввести флаг boolean doStop и проверять его значение перед каждой итерацией в условии while.
При нажатии старт начинаешь даунлоад, но не таким способом, как ты делал. Дело в том, что он не позволяет устанавливать свои HTTP-заголовки. Надо использовать или HttpUrlConnection или HttpClient.
Пойдем по простому пути
| Код |
private int readBytes=0; private boolean doStop=false;
private void download() throws IOException{ HttpURLConnection conn=(HttpURLConnection)flURL.openConnection(); conn.setRequestProperty("Range", "bytes="+readBytes+"-"); // readBytes - кол-во считанных байтов. Сервер начнет передачу начиная с readBytes-байта включительно.
while(!doStop && (intRead=bis.read(btBuffer))!= -1){ out.write(btBuffer, 0, intRead); readBytes=readBytes+intRead; } ... conn.disconnect(); }
private void stopDownload(){ doStop=true; }
private void startDownload(){ doStop=false; download(); }
|
Суть такова. Ну и включи обработку ошибок где тебе будет удобнее. |