Android更新下载进度条

下载文件会阻塞UI主线程,所以需要new一个新线程来执行下载操作,通过handler执行更新UI进度条操作。代码如下:

 

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Android 中显示下载进度条可以使用 ProgressDialog。首先需要创建一个 AsyncTask 类,然后在 doInBackground 方法中进行下载操作并更新进度条,最后在 onPostExecute 方法中完成下载。 以下是一个示例代码: ```java public class DownloadTask extends AsyncTask<String, Integer, String> { private Context context; private PowerManager.WakeLock mWakeLock; private ProgressDialog mProgressDialog; public DownloadTask(Context context) { this.context = context; } @Override protected void onPreExecute() { super.onPreExecute(); // 创建进度条对话框并设置样式 mProgressDialog = new ProgressDialog(context); mProgressDialog.setMessage("正在下载,请稍候..."); mProgressDialog.setIndeterminate(false); mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); mProgressDialog.setCancelable(true); mProgressDialog.show(); // 保持屏幕亮度 PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); mWakeLock = powerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, getClass().getSimpleName()); mWakeLock.acquire(); } @Override protected String doInBackground(String... urls) { InputStream input = null; OutputStream output = null; HttpURLConnection connection = null; try { URL url = new URL(urls[0]); connection = (HttpURLConnection) url.openConnection(); connection.connect(); // 获取文件大小 int fileLength = connection.getContentLength(); // 创建输入流和输出流 input = connection.getInputStream(); output = new FileOutputStream(Environment.getExternalStorageDirectory().getPath() + "/downloadedfile.mp4"); byte data[] = new byte[4096]; long total = 0; int count; while ((count = input.read(data)) != -1) { total += count; // 更新进度条 publishProgress((int) (total * 100 / fileLength)); output.write(data, 0, count); } } catch (Exception e) { return e.toString(); } finally { try { if (output != null) output.close(); if (input != null) input.close(); } catch (IOException ignored) { } if (connection != null) connection.disconnect(); } return null; } @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); // 更新进度条 mProgressDialog.setProgress(values[0]); } @Override protected void onPostExecute(String result) { super.onPostExecute(result); // 关闭进度条对话框 mProgressDialog.dismiss(); mWakeLock.release(); if (result != null) Toast.makeText(context, "下载出错:" + result, Toast.LENGTH_LONG).show(); else Toast.makeText(context, "下载完成", Toast.LENGTH_SHORT).show(); } } ``` 使用时,只需要创建一个 DownloadTask 对象并调用 execute 方法即可: ```java new DownloadTask(this).execute("http://example.com/file.mp4"); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值