Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android自動更新軟件版本

android自動更新軟件版本

編輯:關於Android編程

根據網上的然後小改
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;


import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.net.Uri;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ProgressBar;


public class UpdateManager { 
   private Context mContext; 
   private final String updateMsg = "親,有新版本,要更新嗎!";            //下載消息提示 
   private Dialog noticeDialog;                                        //下載提示對話框 
   private Dialog downloadDialog;                                      //下載進度對話框 
   private ProgressBar mProgressBar;                                   //進度條 
   private Boolean interceptFlag = false;                              //標記用戶是否在下載過程中取消下載 
   private Thread downloadApkThread = null;                            //下載線程 
   private final String apkUrl = "http://www.xxx/xxx.apk";       //apk的URL地址 
   private final String savePath = "/sdcard/UpdateDemo/";              //下載的apk存放的路徑 
   private final String saveFileName = savePath + "xxx.apk";   //下載的apk文件 
   private int progress = 0;                                           //下載進度 
   private final int DOWNLOAD_ING = 1;                                 //標記正在下載 
   private final int DOWNLOAD_OVER = 2;                                //標記下載完成 
   private final String TAG="版本更新"; 
   //日志打印標簽 
   private Handler mhandler = new Handler() {                          //更新UI的handler 
 
       @Override 
       public void handleMessage(Message msg) { 
           super.handleMessage(msg); 
           switch (msg.what) { 
           case DOWNLOAD_ING: 
               // 更新進度條 
               mProgressBar.setProgress(progress); 
               break; 
           case DOWNLOAD_OVER: 
               downloadDialog.dismiss(); 
               installApk(); 
               //安裝 
               break; 
           default: 
               break; 
           } 
       } 
 
   }; 
    
   /*
    * 構造方法
    */ 
   public UpdateManager(Context context) { 
       this.mContext = context; 
   } 
 
   /*
    * 檢查是否有需要更新,具體比較版本xml
    */ 
   public void checkUpdate() { 
       // 到服務器檢查軟件是否有新版本 
       //如果有則 
       showNoticeDialog(); 
   } 
 
   /*
    * 顯示版本更新對話框
    */ 
   private void showNoticeDialog() { 
       AlertDialog.Builder builder = new Builder(mContext); 
       builder.setTitle("版本更新"); 
       builder.setMessage(updateMsg); 
       builder.setPositiveButton("更新", new OnClickListener() { 
 
           public void onClick(DialogInterface dialog, int which) { 
               noticeDialog.dismiss(); 
               showDownloadDialog(); 
           } 
       }); 
       builder.setNegativeButton("以後再說", new OnClickListener() { 
 
           public void onClick(DialogInterface dialog, int which) { 
               noticeDialog.dismiss(); 
           } 
       }); 
       noticeDialog = builder.create(); 
       noticeDialog.show(); 
 
   } 
 
   /*
    * 彈出下載進度對話框
    */ 
   private void showDownloadDialog() { 
       AlertDialog.Builder builder = new Builder(mContext); 
       builder.setTitle("軟件更新"); 
       final LayoutInflater inflater = LayoutInflater.from(mContext); 
       View v = inflater.inflate(R.layout.progress, null); 
       mProgressBar = (ProgressBar) v.findViewById(R.id.updateProgress); 
       builder.setView(v); 
       builder.setNegativeButton("取消", new OnClickListener() { 
 
           public void onClick(DialogInterface dialog, int which) { 
               downloadDialog.dismiss(); 
               interceptFlag = true; 
           } 
       }); 
       downloadDialog = builder.create(); 
       downloadDialog.show(); 
       downloadLatestVersionApk(); 
 
   } 
    
   /*
    * 下載最新的apk文件
    */ 
   private void downloadLatestVersionApk() { 
       downloadApkThread = new Thread(downloadApkRunnable); 
       downloadApkThread.start(); 
   } 
    
   //匿名內部類,apk文件下載線程 
   private Runnable downloadApkRunnable = new Runnable() { 
 
       public void run() { 
           try { 
               URL url = new URL(apkUrl); 
               HttpURLConnection conn = (HttpURLConnection) url 
                       .openConnection(); 
               conn.setConnectTimeout(5*1000);
               conn.connect(); 
               int length = conn.getContentLength(); 
               Log.e(TAG, "總字節數:"+length); 
               InputStream is = conn.getInputStream(); 
               File file = new File(savePath); 
               if (!file.exists()) { 
                   file.mkdir(); 
               } 
               File apkFile = new File(saveFileName); 
               FileOutputStream out = new FileOutputStream(apkFile); 
               int count = 0; 
               int readnum = 0; 
               byte[] buffer = new byte[1024]; 
               do { 
                   readnum = is.read(buffer); 
                   count += readnum; 
                   progress = (int) (((float) count / length) * 100); 
                   Log.e(TAG, "下載進度"+progress); 
                   mhandler.sendEmptyMessage(DOWNLOAD_ING); 
                   if (readnum <= 0) { 
                       // 下載結束 
                       mhandler.sendEmptyMessage(DOWNLOAD_OVER); 
                       break; 
                   } 
                   out.write(buffer,0,readnum); 
               } while (!interceptFlag); 
               is.close(); 
               out.close(); 
           } catch (MalformedURLException e) { 
               e.printStackTrace(); 
           } catch (IOException e) { 
               e.printStackTrace(); 
           } 
 
       } 
   }; 
   /*
    * 安裝下載的apk文件
    */ 
   private void installApk() { 
       File file= new File(saveFileName); 
       if(!file.exists()){ 
           return; 
       } 
       Intent intent= new Intent(Intent.ACTION_VIEW); 
       intent.setDataAndType(Uri.parse("file://"+file.toString()), "application/vnd.android.package-archive"); 
       mContext.startActivity(intent); 
   } 
} 

 


 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved