1

I want to develop file downloader app . which download list of file .when I add file to downloader list then its updating progress periodically. I close all activity and again I run the app then my app list all the current downloads with continuous progressbar

What should I do for that ?

I am using this async task for downloading File

class DownloadFileFromURL extends AsyncTask<String, String, String> {
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
            }

            @Override
            protected String doInBackground(String... f_url) {
                int count;
                try {
                    URL url = new URL(f_url[0]);
                    URLConnection conection = url.openConnection();
                    conection.connect();
                    // getting file length
                    lenghtOfFile = conection.getContentLength();

                    // input stream to read file - with 8k buffer
                    InputStream input = new BufferedInputStream(
                            url.openStream(), 8192);
                    OutputStream output = null;

                    if (space_avaliable) {
                        File dir = new File(
                                Utill.saveFile(CustomGroupTabActivity.mTabHost
                                        .getContext()) + "/tocaonline");
                        if (!dir.exists()) {
                            dir.mkdirs();
                        }
                        // Output stream to write file
                        output = new FileOutputStream(
                                Utill.saveFile(CustomGroupTabActivity.mTabHost
                                        .getContext())
                                        + "/tocaonline/"
                                        + "test.mp3");

                        byte data[] = new byte[1024];

                        long total = 0;

                        while ((count = input.read(data)) != -1) {
                            total += count;
                            // publishing the progress....
                            // After this onProgressUpdate will be called
                            publishProgress(""
                                    + (int) ((total * 100) / lenghtOfFile));

                            // writing data to file
                            output.write(data, 0, count);
                        }

                        // flushing output
                        output.flush();
                    }

                    // closing streams
                    output.close();
                    input.close();

                } catch (Exception e) {
                    Log.e("Error: ", e.getMessage());
                }

                return null;
            }

            protected void onProgressUpdate(String... progress) {
                // setting progress percentage
                p_bar.setProgress(Integer.parseInt(progress[0]));
            }

            @SuppressWarnings("unchecked")
            @Override
            protected void onPostExecute(String file_url) {

            }
        }

And when I click on add to download button then I am adding dynamic view to the linear layout.

LinearLayout lytParent = (LinearLayout) findViewById(R.id.boxset_parentview);
        LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        inflater = LayoutInflater.from(CustomGroupTabActivity.mTabHost
                .getContext());

        View convertview = inflater.inflate(R.layout.raw_set_detail, null);

final ProgressBar p_bar = (ProgressBar) convertview
                .findViewById(R.id.rawsetdetails_sync_progress);

lytParent.addView(convertview);

It running well when my activity is active. but when I close all activity and again running this activity then I want to show actual downloading progress with active downloads.

4

2 回答 2

3

这是你如何实现它:

1) 运行后台服务进行下载。此链接为您提供服务的基础知识。它将使用线程池进行多个活动下载。它将以块的形式读取数据并将块读取事件发送到注册侦听器,以便活动可以更新其 UI。

2) 每当您想下载时,将请求发送到带有项目名称、项目 ID 和 http 链接的服务。服务会为每次下载保留这三件事以及下载的总大小和下载的字节数。

3) 现在,每当您启动活动时(让我们调用下载管理器屏幕),然后要求服务提供当前活动和排队下载。服务将提供下载项目的列表(项目名称、项目 ID、项目 http 链接、项目总大小和下载的字节数),您可以使用它来使用 ListView 创建视图。您可以使用项目总大小和下载字节数来创建进度条。

4) 向服务注册块读取事件。因此,服务会在每个块读取下载请求后通知活动,其中包含项目名称、项目 ID、项目 http 链接、项目总大小和下载的字节数。使用此信息更新活动中的项目列表,并通知适配器已更改的数据将更新列表视图。

5) 活动关闭时取消注册事件监听器。

于 2012-11-07T19:07:30.393 回答
0

我假设您正在使用 ListView。
在这种情况下,您必须添加以下代码getView()
如果下载正在运行:显示进度条
否则:隐藏进度条。

那是因为如果可能,Android 会重用视图,因此视图可能仍然是 Visibile 错误的。

于 2012-11-07T12:43:44.570 回答