如何获取下载文件的剩余持续时间

时间:2016-11-08 12:25:03

标签: java android time

public class MainActivity extends AppCompatActivity {




    // button to show progress Dialog
    Button btnShowProgress;

    // progress dialog
    ProgressDialog proDaiog;


    //File url to download
    private static String url = "http://rvo/file/Ardu_Vid.mp4";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        // show progress bar button
        btnShowProgress = (Button) findViewById(R.id.button);

        btnShowProgress.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new DownloadFile().execute(url);
                //   running = true;
                //   runTimer();

            }
        });

    } // end onCreate

    private class DownloadFile extends AsyncTask<String, Integer, String> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            proDaiog = new ProgressDialog(MainActivity.this);

            //Set progress dialog title
            proDaiog.setTitle("Downloading...");

            //set progress dialog message
            proDaiog.setMessage("");
            proDaiog.setIndeterminate(false);
            proDaiog.setMax(100);
            proDaiog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);


            proDaiog.show();

        }


        @Override
        protected String doInBackground(String... Url) {
            try {
                URL url = new URL(Url[0]);
                URLConnection connection = url.openConnection();
                connection.connect();

                //Detect File Length
                int fileLength = connection.getContentLength();

                //Locate Storage Location
                String filePath = Environment.getExternalStorageDirectory().getPath();

                //Downloading File
                InputStream input = new BufferedInputStream(url.openStream());

                //Save the Download File
                OutputStream output = new FileOutputStream(filePath + "/" + "Ardu_Vid.mp4");

                byte data[] = new byte[fileLength];
                long total = 0;
                int count;
                int s = 1;
                //  Long startTime = System.nanoTime();
                //  Log.e("Time-",""+startTime);
//                Long elapsedTime = System.nanoTime() - startTime;
                int sec = 0;

                while ((count = input.read(data)) != -1) {

                    long Start_Timee = System.currentTimeMillis();

                    //long seconds = TimeUnit.MILLISECONDS.toSeconds(Start_Timee);


                    total += count;
                    output.write(data, 0, count);

                    //publish the progress
                    publishProgress((int) (total * 100 / fileLength));

                /************ Get Duration of Downloading ***************/

                    Long End_Timee = System.currentTimeMillis();
                    Log.e("Time_End", "" + End_Timee);

                    long seccc = (End_Timee - Start_Timee);
                    Log.e("estimate ",""+seccc);

                    int seconds = (int) (seccc / 1000) % 60 ;
                    int minutes = (int) ((seccc / (1000*60)) % 60);
                    Log.e("elapse",""+minutes+":"+seconds);



                }// end while

                //close connection
                output.flush();
                output.close();
                input.close();

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

            return null;
        }

        @Override
        protected void onProgressUpdate(Integer... progress) {
            super.onProgressUpdate(progress);
            proDaiog.setProgress(progress[0].intValue());
            Log.i("proDaiog.setProgress", "" + progress[0]);
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            proDaiog.dismiss();
        }
    } // end Asyc

我想获得下载文件的剩余持续时间如果您使用Idm您在下载期间看到了剩余时间我希望在我的应用程序中显示相同的功能但我坚持这个功能我完成了整个应用程序但我被卡住了只有剩余时间请帮助

1 个答案:

答案 0 :(得分:0)

让你前进的一些想法:

  1. 您的代码知道文件大小
  2. 您的代码可以知道到目前为止下载了多少字节;和花了多少时间
  3. 使用该信息,计算剩余时间的估计值应该非常简单。

    换句话说:简单地计算当前的下载速率X(你想确保在这之前等待一段时间;为了以某种方式使用“可靠的”(也就是稳定的)数字)。然后计算下载剩余字节数Y所花费的时间...给定X.

    示例:假设您要下载100 MB的文件。

    1分钟后,您检查并发现您目前已下载了10 MB。 因此,您的观察是:“下载速度约为每分钟10MB”。

    这意味着:如果速度变化不大,那么剩余的90 MB将需要大约9分钟。

    当然,这只是一个估计,基于观察字节进入该点的速度。您应该确保您的代码不断更新其预测(以“稳定”的方式,以避免每5秒为用户提供完全不同的预测。)

    最后说明:请理解我们不会为您实施提示。这是您的应用,您的愿景,您的产品。