热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

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

这篇文章主要介绍了Android下载文件通知栏显示进度条功能的实例代码,通过使用AsyncTask异步任务实现,调用publishProgress()方法刷新进度来实现,具体代码大家参考下本文

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 下载文件通知栏显示进度条功能的实例代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!


推荐阅读
  • 本文详细介绍如何使用arm-eabi-gdb调试Android平台上的C/C++程序。通过具体步骤和实用技巧,帮助开发者更高效地进行调试工作。 ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • Android 九宫格布局详解及实现:人人网应用示例
    本文深入探讨了人人网Android应用中独特的九宫格布局设计,解析其背后的GridView实现原理,并提供详细的代码示例。这种布局方式不仅美观大方,而且在现代Android应用中较为少见,值得开发者借鉴。 ... [详细]
  • 在Ubuntu 16.04 LTS上配置Qt Creator开发环境
    本文详细介绍了如何在Ubuntu 16.04 LTS系统中安装和配置Qt Creator,涵盖了从下载到安装的全过程,并提供了常见问题的解决方案。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 本文详细介绍了如何使用ActionScript 3.0 (AS3) 连接并操作MySQL数据库。通过具体的代码示例和步骤说明,帮助开发者理解并实现这一过程。 ... [详细]
  • 在即将迎来26岁生日之际,作者的人生陷入了低谷。经过近三年的硕士学习后,最终决定退学,并且面临没有工作经验的困境。尽管如此,作者依然坚定地选择为自己的人生负责。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • 本文详细介绍了美国最具影响力的十大财团,包括洛克菲勒、摩根、花旗银行等。这些财团在历史发展过程中逐渐形成,并对美国的经济、政治和社会产生深远影响。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 本题通过将每个矩形视为一个节点,根据其相对位置构建拓扑图,并利用深度优先搜索(DFS)或状态压缩动态规划(DP)求解最小涂色次数。本文详细解析了该问题的建模思路与算法实现。 ... [详细]
author-avatar
福田商务汽车-日照方傲
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有