我使用的是Android下载管理器。然后,我看到了斗智斗勇,所以基本上我去了意图服务下载文件,并且从意图服务我正在用处理程序更新进度对话框。
在意向服务中,我正在打开一个输入流,并使用输出流将输出文件写入下载文件夹。
现在一切都还好,但我的问题是如何为用户提供取消中间下载的选项?我在onHandleIntent中的代码如下。
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream(footyDirectory.toString()+"/demo.mp4");
byte data[] = new byte[1024];
long total = 0;
int count;
while ((count = input.read(data)) != -1) {
total += count;
// publishing the progress....
Bundle resultData = new Bundle();
resultData.putInt("progress" ,(int) (total * 100 / fileLength));
receiver.send(UPDATE_PROGRESS, resultData);
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
答案 0 :(得分:2)
在intentService中取消变量。当用户想要取消它时,将取消设置为true。在while循环中,检查取消的值。如果是真的,退出循环并清理并进行任何清理,你需要删除部分文件,删除通知等。
答案 1 :(得分:1)
声明一个boolean
变量isCanceled
在循环中使用,并在其中设置为true
用户取消下载。
while ((count = input.read(data)) != -1) {
if(isCanceled){
//Do your work here (close stream, delete temp file, send broadcast...)
break;
}
total += count;
// publishing the progress....
Bundle resultData = new Bundle();
resultData.putInt("progress" ,(int) (total * 100 / fileLength));
receiver.send(UPDATE_PROGRESS, resultData);
output.write(data, 0, count);
}