效果图:
- 我用的是运行HttpUtils模块来进行多线程下载,因为该模块支持断点续传,用起来非常方便!
开源地址
https://github.com/wyouflf/xUtils3.git
下载然后用zip解压, 取出jar包放入工程添加即可.
我运用的ButterKnife,这样操作代码更加便捷,在这里就不多复述了,可自行查询学习
首先是布局
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/btn_down"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始下载" />
<Button
android:id="@+id/btn_stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="暂停下载" />
</LinearLayout>
<TextView
android:layout_marginTop="10dp"
android:id="@+id/tv_failure"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:layout_marginTop="10dp"
android:id="@+id/tv_progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="下载进度" />
<ProgressBar
android:id="@+id/pb"
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
MainActivity.java(注意里边写下载接口,我用的拼接)
public class MainActivity extends AppCompatActivity {
Boolean isDowloding = false;
HttpHandler handler;
@BindView(btn_down)
Button btnDown;
@BindView(btn_stop)
Button btnStop;
@BindView(R.id.tv_failure)
TextView tvFailure;
@BindView(tv_progress)
TextView tvProgress;
@BindView(R.id.pb)
ProgressBar pb;
@BindView(R.id.yhm)
Button yhm;
@BindView(R.id.activity_main)
LinearLayout activityMain;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
}
@OnClick({btn_down, btn_stop})
public void onViewClicked(View view) {
String fileName = "911Mothers_2010W-480p.mp4";
switch (view.getId()) {
case btn_down:
btnStop.setEnabled(true);
btnDown.setEnabled(false);
String path = "http://mirror.aarnet.edu.au/pub/TED-talks/" + fileName;
HttpUtils http = new HttpUtils();
handler = http.download(path, Environment.getExternalStorageDirectory() + "/"
+ fileName, true, true, new RequestCallBack<File>() {
@Override
public void onSuccess(ResponseInfo<File> arg0) {
isDowloding = false;
// 下载成功
Toast.makeText(MainActivity.this, arg0.result.getPath(), Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(HttpException arg0, String arg1) {
// 下载失败
tvFailure.setText(arg1);
}
@Override
public void onLoading(long total, long current, boolean isUploading) {
super.onLoading(total, current, isUploading);
if (current < total) {
isDowloding = true;
} else {
isDowloding = false;
}
// 下载任务
pb.setMax((int) total);
pb.setProgress((int) current);
tvProgress.setText(current * 100 / total + "%");
}
});
break;
case btn_stop:
btnStop.setEnabled(false);
btnDown.setEnabled(true);
if (isDowloding) {
if (handler != null) {
handler.cancel();
}
}
break;
}
}
}