栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

Android 下载文件通知栏显示进度条功能的实例代码

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android 下载文件通知栏显示进度条功能的实例代码

1、使用AsyncTask异步任务实现,调用publishProgress()方法刷新进度来实现(已优化)

public class MyAsyncTask extends AsyncTask {
  private Context context;
  private NotificationManager notificationManager;
  private NotificationCompat.Builder builder;
  public MyAsyncTask(Context context){
    this.context = context;
    notificationManager = (NotificationManager) context.getSystemService(Activity.NOTIFICATION_SERVICE);
    builder = new NotificationCompat.Builder(context);
  }
  @Override
  protected void onPreExecute() {
    super.onPreExecute();
    builder.setSmallIcon(R.mipmap.ic_launcher)
 .setContentInfo("下载中...")
 .setContentTitle("正在下载");
  }
  @Override
  protected Integer doInBackground(String... params) {
    Log.e(TAG, "doInBackground: "+params[0] );
    InputStream is = null;
    OutputStream os = null;
    HttpURLConnection connection = null;
    int total_length = 0;
    try {
      URL url1 = new URL(params[0]);
      connection = (HttpURLConnection) url1.openConnection();
      connection.setRequestMethod("GET");
      connection.setReadTimeout(50000);
      connection.connect();
      if(connection.getResponseCode() == 200){
 is = connection.getInputStream();
 os = new FileOutputStream("/sdcard/zongzhi.apk");
 byte [] buf = new byte[1024];
 int len;
 int pro1=0;
 int pro2=0;
 // 获取文件流大小,用于更新进度
 long file_length = connection.getContentLength();
 while((len = is.read(buf))!=-1){
   total_length += len;
   if(file_length>0) {
     pro1 = (int) ((total_length / (float) file_length) * 100);//传递进度(注意顺序)
   }
   if(pro1!=pro2) {
     // 调用update函数,更新进度
     publishProgress(pro2=pro1);
   }
   os.write(buf, 0, len);
 }
      }
    } catch (MalformedURLException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }finally {
      try {
 if (is != null) {
   is.close();
 }
 if (os != null) {
   os.close();
 }
      } catch (IOException e) {
 e.printStackTrace();
      }
      if (connection != null) {
 connection.disconnect();
      }
    }
    return total_length;
  }
  @Override
  protected void onCancelled(Integer integer) {
    super.onCancelled(integer);
  }
  @Override
  protected void onCancelled() {
    super.onCancelled();
  }
  @Override
  protected void onProgressUpdate(Integer... values) {
    super.onProgressUpdate(values);
    builder.setProgress(100,values[0],false);
    notificationManager.notify(0x3,builder.build());
    //下载进度提示
    builder.setContentText("下载"+values[0]+"%");
    if(values[0]==100) {  //下载完成后点击安装
      Intent it = new Intent(Intent.ACTION_VIEW);
      it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      it.setDataAndType(Uri.parse("file:///sdcard/zongzhi.apk"), "application/vnd.android.package-archive");
      PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, it, PendingIntent.FLAG_UPDATE_CURRENT);
      builder.setContentTitle("下载完成")
   .setContentText("点击安装")
   .setContentInfo("下载完成")
   .setContentIntent(pendingIntent);
      notificationManager.notify(0x3, builder.build());
    }
  }
  @Override
  protected void onPostExecute(Integer integer) {
    super.onPostExecute(integer);
    if(integer == 100) {
      Toast.makeText(context, "下载完成", Toast.LENGTH_SHORT).show();
    }
  }
}

2、使用系统服务来实现(不是特别推荐此方法)

//取得系统的下载服务
    DownloadManager downloadManager= (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
    //创建下载请求对象
    DownloadManager.Request request=new DownloadManager.Request(Uri.parse(downUrl));
    request.setDestinationInExternalPublicDir("目录","文件名");
    request.setNotificationVisibility(DownloadManager.Request.NETWORK_MOBILE|DownloadManager.Request.NETWORK_WIFI);
    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
    downloadManager.enqueue(request);

总结

以上所述是小编给大家介绍的Android 下载文件通知栏显示进度条功能的实例代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/156381.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号