Android 在线更新apk

1.获取当前包的信息:

 1 PackageManager manager = Main.this.getPackageManager();
 2 try {
 3     PackageInfo info = manager.getPackageInfo(Main.this.getPackageName(), 0);
 4     String appVersion = info.versionName; // 版本名
 5     currentVersionCode = info.versionCode; // 版本号
 6     System.out.println(currentVersionCode + " " + appVersion);
 7 } catch (NameNotFoundException e) {
 8    // TODO Auto-generated catch blockd
 9  e.printStackTrace(); 10 } 11 //上面是获取manifest中的版本数据,使用了versionCode 12 //在从服务器获取到最新版本的versionCode,比较 13 showUpdateDialog();

2.直接启动线程进行下载管理并安装:

 1 private void showUpdateDialog() {
 2         AlertDialog.Builder builder = new AlertDialog.Builder(this);
 3         builder.setTitle("检测到新版本");
 4         builder.setMessage("是否下载更新?");
 5         builder.setPositiveButton("更新", new DialogInterface.OnClickListener() {
 6 
 7             @Override
 8             public void onClick(DialogInterface dialog, int which) {
 9                 // TODO Auto-generated method stub11                 showDownloadDialog();
            dialog.dismiss();
14             }
15         }).setNegativeButton("稍后更新", new DialogInterface.OnClickListener() {
16 
17             @Override
18             public void onClick(DialogInterface dialog, int which) {
19                 // TODO Auto-generated method stub
20          dialog.dismiss();
21             }
22         });
23         builder.show();
24     }

3.弹出下载更新进度框,进行apk下载更新:

 1 private void showDownloadDialog(){
 2         AlertDialog.Builder builder = new Builder(mContext);
 3         builder.setTitle("软件版本更新");
 4         
 5         final LayoutInflater inflater = LayoutInflater.from(mContext);
 6         View v = inflater.inflate(R.layout.progress, null);
 7         mProgress = (ProgressBar)v.findViewById(R.id.progress);
 8         
 9         builder.setView(v);
10         builder.setNegativeButton("取消", new OnClickListener() {    
11             @Override
12             public void onClick(DialogInterface dialog, int which) {
13                 dialog.dismiss();
14                 interceptFlag = true;
15             }
16         });
17         downloadDialog = builder.create();
18         downloadDialog.show();
19         
20         downloadApk();
21     }

4.启动线程进行下载任务:

1  /**
2      * 下载apk
3      */
4     
5     private void downloadApk(){
6         downLoadThread = new Thread(mdownApkRunnable);
7         downLoadThread.start();
8     }

5.对于下载更新进度框的控制:interceptFlag

 1 private Runnable mdownApkRunnable = new Runnable() {    
 2         @Override
 3         public void run() {
 4             try {
 5                 URL url = new URL(apkUrl);
 6             
 7                 HttpURLConnection conn = (HttpURLConnection)url.openConnection();
 8                 conn.connect();
 9                 int length = conn.getContentLength();
10                 InputStream is = conn.getInputStream();
11                 
12                 File file = new File(savePath);
13                 if(!file.exists()){
14                     file.mkdir();
15                 }
16                 String apkFile = saveFileName;
17                 File ApkFile = new File(apkFile);
18                 FileOutputStream fos = new FileOutputStream(ApkFile);
19                 
20                 int count = 0;
21                 byte buf[] = new byte[1024];
22                 
23                 do{                      
24                     int numread = is.read(buf);
25                     count += numread;
26                     progress =(int)(((float)count / length) * 100);
27                     //更新进度
28                     mHandler.sendEmptyMessage(DOWN_UPDATE);
29                     if(numread <= 0){    
30                         //下载完成通知安装
31                         mHandler.sendEmptyMessage(DOWN_OVER);
32                         break;
33                     }
34                     fos.write(buf,0,numread);
35                 }while(!interceptFlag);//点击取消就停止下载.
36                 
37                 fos.close();
38                 is.close();
39             } catch (MalformedURLException e) {
40                 e.printStackTrace();
41             } catch(IOException e){
42                 e.printStackTrace();
43             }
44             
45         }
46     };

6.进行提示框进度条更新:

 1 private Handler mHandler = new Handler(){
 2         public void handleMessage(Message msg) {
 3             switch (msg.what) {
 4             case DOWN_UPDATE:
 5                 mProgress.setProgress(progress);
 6                 break;
 7             case DOWN_OVER:
 8                 
 9                 installApk();
10                 break;
11             default:
12                 break;
13             }
14         };
15     };

7.下载完成,进行apk安装:

 1  /**
 2      * 安装apk
 3      */
 4     private void installApk(){
 5         File apkfile = new File(saveFileName);
 6         if (!apkfile.exists()) {
 7             return;
 8         }    
 9         Intent i = new Intent(Intent.ACTION_VIEW);
10         i.setDataAndType(Uri.parse("file://" + apkfile.toString()), "application/vnd.android.package-archive"); 
11         mContext.startActivity(i);
12     
13     }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值