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つのものを保持します。

3)アクティビティを起動するたびに(電話はダウンロードマネージャー画面になります)、現在アクティブでキューに入れられているダウンロードを提供するようにサービスに依頼します。サービスはダウンロードアイテムのリスト(アイテム名、アイテムID、アイテムhttpリンク、アイテムの合計サイズ、ダウンロードされたバイト数)を提供します。これを使用して、ListViewを使用してビューを作成できます。プログレスバーを作成するために、アイテムの合計サイズとダウンロードされたバイト数を使用できます。

4)サービスにチャンク読み取りイベントを登録します。したがって、サービスは、ダウンロード要求の各チャンクが読み取られた後、アイテム名、アイテムID、アイテムhttpリンク、アイテムの合計サイズ、およびダウンロードされたバイト数でアクティビティを通知します。この情報を使用して、アクティビティ内のアイテムリストを更新し、それに変更されたデータがリストビューを更新することをアダプタに通知します。

5)アクティビティが閉じられたときに、イベントリスナーの登録を解除しました。

于 2012-11-07T19:07:30.393 に答える
0

ListViewを使用していると思います。
その場合、コードを次のgetView()ように追加する必要があり
ます


これは、可能であれば Android がビューを再利用するため、誤ってビューがまだ表示されている可能性があるためです。

于 2012-11-07T12:43:44.570 に答える