Progress Bar % completed (download) Display in Android

后端 未结 3 2005
逝去的感伤
逝去的感伤 2020-12-21 15:28

I have a problem with Progress Bar showing % of download completed. I have a service class in which the downloading takes place. I can get the start time and end time of do

3条回答
  •  谎友^
    谎友^ (楼主)
    2020-12-21 16:16

    I would prefer AsyncTask for this.

    Here's an example

    ProgressDialog mProgressDialog;
    // instantiate it within the onCreate method
    mProgressDialog = new ProgressDialog(YourActivity.this);
    mProgressDialog.setMessage("A message");
    mProgressDialog.setIndeterminate(false);
    mProgressDialog.setMax(100);
    mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    
    // execute this when the downloader must be fired
    DownloadFile downloadFile = new DownloadFile();
    downloadFile.execute("the url to the file you want to download");
    

    here's the AsyncTask

    private class DownloadFile extends AsyncTask {
    @Override
    protected String doInBackground(String... sUrl) {
        try {
            URL url = new URL(sUrl[0]);
            URLConnection connection = url.openConnection();
            connection.connect();
            // this will be useful so that you can show a typical 0-100% progress bar
            int fileLength = connection.getContentLength();
    
            // download the file
            InputStream input = new BufferedInputStream(url.openStream());
            OutputStream output = new FileOutputStream("/sdcard/file_name.extension");
    
            byte data[] = new byte[1024];
            long total = 0;
            int count;
            while ((count = input.read(data)) != -1) {
                total += count;
                // publishing the progress....
                publishProgress((int) (total * 100 / fileLength));
                output.write(data, 0, count);
            }
    
            output.flush();
            output.close();
            input.close();
        } catch (Exception e) {
        }
        return null;
    }
    

    This can be done using Download from Service as well as Download Manager class. Refer this question for details.

    EDIT

    The percentage completed is what you actually publish in the progress dialog. If you want to display the percentage, you may use this (total * 100 / fileLength).

    int percentage =  (total * 100 / fileLength);
    TextView tv = (TextView)findViewById(R.id.textview);
    tv.setText("" + percentage);
    

    Use this code to display the percentage in the desired textview.

提交回复
热议问题