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您在下载期间看到了剩余时间我希望在我的应用程序中显示相同的功能但我坚持这个功能我完成了整个应用程序但我被卡住了只有剩余时间请帮助
答案 0 :(得分:0)
让你前进的一些想法:
使用该信息,计算剩余时间的估计值应该非常简单。
换句话说:简单地计算当前的下载速率X(你想确保在这之前等待一段时间;为了以某种方式使用“可靠的”(也就是稳定的)数字)。然后计算下载剩余字节数Y所花费的时间...给定X.
示例:假设您要下载100 MB的文件。
1分钟后,您检查并发现您目前已下载了10 MB。 因此,您的观察是:“下载速度约为每分钟10MB”。
这意味着:如果速度变化不大,那么剩余的90 MB将需要大约9分钟。
当然,这只是一个估计,基于观察字节进入该点的速度。您应该确保您的代码不断更新其预测(以“稳定”的方式,以避免每5秒为用户提供完全不同的预测。)
最后说明:请理解我们不会为您实施提示。这是您的应用,您的愿景,您的产品。