1.下载方法
private File download() {
  HomeActivity app = HomeActivity.homeActivity();
  SpTryListenData spData = SpTryListenData.getInstance();
  String httpUrl="xxxxxxxxxxxxxxxxxxx"; 
// 后台地址
  Log.e("","cynos:downLoad state = 0");
  final String fileName = "MobileMusic503_014732W_feiyinghe.apk";
//下载文件的名字
  Log.e("","cynos:downLoad state = 1");
  int downLoad_num = 0;
  boolean downOK=false;
  final File file = new File(spData.downloadDir.getPath()+ "/" + fileName);
//下载文件的路径
  Log.e("","cynos:downLoad state = 2");
  try {
   URL url = new URL(httpUrl);
   Log.e("","cynos:downLoad state = "+httpUrl);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setConnectTimeout(60000);//jdk 1.5换成这个,连接超时
          conn.setReadTimeout(60000);//jdk 1.5换成这个,读操作超时
    InputStream is = conn.getInputStream();
    FileOutputStream fos = new FileOutputStream(file);
    byte[] buf = new byte[256];
    Log.i("Test", "cynos:downLoad wait");
    conn.connect();
    Log.i("Test", "cynos:downLoad connect OK !is downloading now");
    double count = 0;
    int downTime=0;
    int fileLength =  conn.getContentLength();
    Log.i("Test", "cynos:maxSize = "+fileLength);
    if (conn.getResponseCode() >= 400) {
    } else {
      boolean wifi=false;
     while (count <= 100) {
      if (is != null) {
       int numRead = is.read(buf);
       int loading = (downLoad_num/(fileLength/100));
       Log.e("", "cynos:downLoad_num = " + downLoad_num+"/"+fileLength+"   进度:"+loading);
       Message message=handler.obtainMessage();
       message.what=100;
       message.obj=loading;
       handler.sendMessage(message);
       downLoad_num += numRead; 
       downTime++;
       if (numRead <= 0) {  
        break;
       } else {
        fos.write(buf, 0, numRead);
       }
      } else {
       break;
      }
     }
    }
    
    Log.i("Test", "over:downLoad_num " + downLoad_num);
    Log.i("Test", "over:fileLength " + fileLength);
    if (downLoad_num+100 >= fileLength)
    {
     mProgress.dismiss();
     app.notifyShowToast("已下载咪咕音乐客户端 "+"\n"+file.getPath());
     Log.e("", "cynos:downLoad_num = "+file.getPath());
     Intent intent = new Intent();
     //执行动作
     intent.setAction(Intent.ACTION_VIEW);
     //执行的数据类型
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
     intent.setDataAndType(Uri.parse("file://" +file.getPath()), "application/vnd.android.package-archive");
     startActivity(intent);
     
    }
    
    conn.disconnect();
    fos.close();
    is.close();
} catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   app.hideProgressBar();
   app.notifyShowToast("下载失败,请检查网络连接或重新下载");
  }
  return file;
 }
2. 下载提示框。ProgressDialog初始

hprivate void downloadApk() {
  AlertDialog.Builder builder = new Builder(TryListenListActivity.this);
  builder.setTitle("下载咪咕音乐客户端");
  builder.setMessage("下载咪咕音乐客户端,获得海量精品音乐是否下载?");
  builder.setPositiveButton("确定下载", new DialogInterface.OnClickListener() {
@Override
   public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
    dialog.dismiss();
//    HomeActivity app = HomeActivity.homeActivity();
//    app.showProgressBar("请稍候,正在下载"+"0%");
if (mProgress == null) {
     mProgress = new ProgressDialog(TryListenListActivity.this);
     mProgress.setMessage("正在下载,请稍后"+"0%");
     mProgress.setIndeterminate(false);
     mProgress.setCancelable(false);
     mProgress.show();
    }
    
    new Thread(new Runnable() {
     @Override
     public void run() {
      // TODO Auto-generated method stub
      download();
     }
    }).start();
   }
  });
  builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
   @Override
   public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
    dialog.dismiss();
   }
  });
  builder.create();
  builder.show();
 }
 private ProgressDialog mProgress = null;
3.  发送小心不断更新 ProgressDialog
Handler handler=new Handler(){
  public void handleMessage(android.os.Message msg) {
   if(msg.what==100){
    final int a=(Integer) msg.obj;
    Log.e("", "cynos:downLoad_num = "+ a);
    HomeActivity app = HomeActivity.homeActivity();
    final String b=String.valueOf(a);
    new Handler().post(new Runnable() {
     @Override
     public void run() {
      // TODO Auto-generated method stub
      mProgress.setMessage("正在下载,请稍后"+b+"%");
     
     }
    });
    
    
    
   }
  };
 };
4. 弊端: 这不是servers 下载更新的 会一直显示在前台,等待下载完毕,下载过程中不能做其他的事情,建议使用notification

HttpURLConnection 后台下载APK文件相关推荐

  1. Android项目实战(三十一):异步下载apk文件并安装(非静默安装)

    前言: 实现异步下载apk文件 并 安装.(进度条对话框显示下载进度的展现方式) 涉及技术点: 1.ProgressDialog   进度条对话框  用于显示下载进度 2.AsyncTask     ...

  2. Android——下载apk文件,并在通知栏显示下载进度

    如何下载apk文件?这里介绍两种方式:一通过异步任务读取文件,二利用系统方法DownloadManager进行下载. 通过异步任务下载apk 文件 public String downloadAsAp ...

  3. 下载apk文件之后变成zip的解决办法

    APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ...

  4. IIS不能下载.apk文件

    IIS服务器不能下载.apk文件的原因:iis的默认MIME类型中没有.apk文件,所以无法下载. 打开IIS服务管理器,找到服务器,右键-属性,打开IIS服务属性: 单击MIME类型下的" ...

  5. 微信公众号手机无法直接下载APK文件是怎么回事

    需求:在微信h5页面中下载第三方app -- 安卓, 直接下载apk文件包:iphone,跳转AppStore 分析:微信不支持,在微信中屏蔽了apk文件的下载以及AppStore的跳转(且除非和TX ...

  6. 使用FileDownloader下载文件(举例版本更新下载apk文件)

    1.当我们把本地的版本号和服务器上的版本号进行对比,如果不一致,那么就进行版本更新,为了增加App的友好性,我们最好加一层Dialog框进行询问是否更新,当点击确定时再弹出popupwindow进行下 ...

  7. PHP下载APK文件

    PHP下载APK文件(代码如下) /*** //这里不要随便打印文字,否则会影响输出的文件的* (例如下载没问题,但是apk安装时候提醒解析安装包错误)* @return array*/public ...

  8. android 打开h5文件下载,微信h5页面下载app —— 安卓直接下载apk文件包,IOS跳转AppStore的实现代码...

    需求:微信h5页面下载app -- 安卓直接下载apk文件包,IOS跳转AppStore 分析:微信不支持,在微信中屏蔽了apk文件的下载以及AppStore的跳转(且除非和TX有合作的应用,否则也不 ...

  9. 微信内浏览器不支持下载APK文件的解决方案 微信中点击链接调用外部浏览器打开

    需求:在微信h5页面中下载第三方app -- 安卓, 直接下载apk文件包:iphone,跳转AppStore 分析:微信不支持,在微信中屏蔽了apk文件的下载以及AppStore的跳转(且除非和TX ...

最新文章

  1. POJ 1017 Packets 贪心 模拟
  2. JAVA多线程和并发基础面试问答
  3. WCF 基础之契约(Contract)[转]
  4. 当前分支上有未提交的更改时签出另一个分支
  5. python入门代码示例-这可能是最好玩的python GUI入门实例!
  6. getId()方法的作用
  7. SQL 性能优化梳理,干掉慢SQL!
  8. 模拟计算机网络中的零比特填充
  9. Silverlight 入门
  10. JS根据文本框内容匹配并高亮显示
  11. oracle脱机什么意思,脱机的是什么意思
  12. 深度学习 GPU环境 Ubuntu 16.04 + Nvidia GTX 1080 + Python 3.6 + CUDA 9.
  13. python基础1之 由来、种类、优缺点、安装环境
  14. underscore 系列之内部函数 restArgs
  15. 如何查找hp计算机的生产日期,旗捷支招 | 如何识别惠普打印机的生产日期
  16. 城管系统服务器,数字城管系统建设方案详细.doc
  17. Python3学习笔记(1): print函数用法总结
  18. Java控制excel,word文档只读模式
  19. 3.java基础--- if、switch语句编程题
  20. 戴老师论文阅读:Two-Timescale Channel Estimation for Reconfigurable Intelligent Surface Aided Wireless...

热门文章

  1. Notice: Undefined offset:——屏蔽掉notice
  2. VirtualBox 共享文件夹 挂载点设置
  3. ctfshow 摆烂杯
  4. [分支限界]给定一个矩阵m*n,从左上角开始每次只能向右或者向下走,最后到右下角的位置共有多少种路径
  5. Segmentfault 内容精选 - 2017 年第 30 周
  6. cartographer保存地图
  7. Blu-ray Disc的简单介绍
  8. 人事档案管理c语言程序,人事档案管理完整系统c语言.doc
  9. “限制20%可保留带宽”是真的吗
  10. 2023年淮阴工学院五年一贯制专转本应用文写作考试大纲