Android下载长文件,带有取消选项

时间:2014-07-21 05:22:51

标签: java android android-intent download

我使用的是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();

2 个答案:

答案 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);
 }