AsyncTask 视频下载
时间: 2023-09-23 14:11:48 浏览: 44
AsyncTask 是 Android 中的一个异步任务类,用于在后台线程执行耗时操作,比如视频下载。您可以使用如下代码实现视频下载:
```java
public class DownloadVideoTask extends AsyncTask<String, Integer, String> {
private Context mContext;
private ProgressDialog mProgressDialog;
public DownloadVideoTask(Context context) {
mContext = context;
mProgressDialog = new ProgressDialog(context);
mProgressDialog.setMessage("正在下载视频,请稍候...");
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
mProgressDialog.show();
}
@Override
protected String doInBackground(String... params) {
String videoUrl = params[0];
String fileName = params[1];
try {
URL url = new URL(videoUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.connect();
int fileLength = connection.getContentLength();
InputStream input = new BufferedInputStream(connection.getInputStream());
OutputStream output = new FileOutputStream(Environment.getExternalStorageDirectory() + "/" + fileName);
byte data[] = new byte[1024];
long total = 0;
int count;
while ((count = input.read(data)) != -1) {
total += count;
publishProgress((int) (total * 100 / fileLength));
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
connection.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
return fileName;
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
mProgressDialog.setProgress(values[0]);
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
mProgressDialog.dismiss();
Toast.makeText(mContext, "视频下载完成,保存在" + Environment.getExternalStorageDirectory() + "/" + result, Toast.LENGTH_LONG).show();
}
}
```
其中,`DownloadVideoTask` 继承自 `AsyncTask`,实现了 `doInBackground()`、`onProgressUpdate()` 和 `onPostExecute()` 三个方法。在 `doInBackground()` 方法中,我们通过 `HttpURLConnection` 发送 HTTP 请求,获取视频数据并写入本地文件中。在 `onProgressUpdate()` 方法中,我们更新下载进度条。在 `onPostExecute()` 方法中,我们关闭进度条并提示用户下载完成。
您可以通过如下代码启动下载任务:
```java
String videoUrl = "http://example.com/video.mp4";
String fileName = "video.mp4";
new DownloadVideoTask(this).execute(videoUrl, fileName);
```
其中,`videoUrl` 为视频下载链接,`fileName` 为视频文件名。