Android App在線更新的代碼

3y8nn 9年前發布 | 4K 次閱讀 Java Android

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.util.Log;
import android.webkit.URLUtil;
import com.hiyo.game.pdk.activity.R;
/**

  • Android AutoUpdate.
  • lazybone/2010.08.20
  • 1.Set apkUrl.
  • 2.check().
  • 3.add delFile() method in resume()\onPause().
    */
    public class MyAutoUpdate {
    public Activity activity = null;
    public int versionCode = 0;
    public String versionName = "";
    private static final String TAG = "AutoUpdate";
    private String currentFilePath = "";
    private String currentTempFilePath = "";
    private String fileEx = "";
    private String fileNa = "";
    private String strURL = "http://127.0.0.1:81/ApiDemos.apk";
    private ProgressDialog dialog;
    public MyAutoUpdate(Activity activity) {
     this.activity = activity;   
     getCurrentVersion();   
    
    }
    public void check() {
     if (isNetworkAvailable(this.activity) == false) {   
         return;   
     }   
     if (true) {// Check version.   
         showUpdateDialog();   
     }   
    
    }
    public static boolean isNetworkAvailable(Context ctx) {
     try {   
         ConnectivityManager cm = (ConnectivityManager) ctx   
                 .getSystemService(Context.CONNECTIVITY_SERVICE);   
         NetworkInfo info = cm.getActiveNetworkInfo();   
         return (info != null && info.isConnected());   
     } catch (Exception e) {   
         e.printStackTrace();   
         return false;   
     }   
    
    }
    public void showUpdateDialog() {
     @SuppressWarnings("unused")   
     AlertDialog alert = new AlertDialog.Builder(this.activity)   
             .setTitle("Title")   
             .setIcon(R.drawable.icon)   
             .setMessage("Update or not?")   
             .setPositiveButton("Update",   
                     new DialogInterface.OnClickListener() {   
                         public void onClick(DialogInterface dialog,   
                                 int which) {   
                             downloadTheFile(strURL);   
                             showWaitDialog();   
                         }   
                     })   
             .setNegativeButton("Cancel",   
                     new DialogInterface.OnClickListener() {   
                         public void onClick(DialogInterface dialog,   
                                 int which) {   
                             dialog.cancel();   
                         }   
                     }).show();   
    
    }
    public void showWaitDialog() {
     dialog = new ProgressDialog(activity);   
     dialog.setMessage("Waitting for update...");   
     dialog.setIndeterminate(true);   
     dialog.setCancelable(true);   
     dialog.show();   
    
    }
    public void getCurrentVersion() {
     try {   
         PackageInfo info = activity.getPackageManager().getPackageInfo(   
                 activity.getPackageName(), 0);   
         this.versionCode = info.versionCode;   
         this.versionName = info.versionName;   
     } catch (NameNotFoundException e) {   
         e.printStackTrace();   
     }   
    
    }
    private void downloadTheFile(final String strPath) {
     fileEx = strURL.substring(strURL.lastIndexOf(".") + 1, strURL.length())   
             .toLowerCase();   
     fileNa = strURL.substring(strURL.lastIndexOf("/") + 1,   
             strURL.lastIndexOf("."));   
     try {   
         if (strPath.equals(currentFilePath)) {   
             doDownloadTheFile(strPath);   
         }   
         currentFilePath = strPath;   
         Runnable r = new Runnable() {   
             public void run() {   
                 try {   
                     doDownloadTheFile(strPath);   
                 } catch (Exception e) {   
                     Log.e(TAG, e.getMessage(), e);   
                 }   
             }   
         };   
         new Thread(r).start();   
     } catch (Exception e) {   
         e.printStackTrace();   
     }   
    
    }
    private void doDownloadTheFile(String strPath) throws Exception {
     Log.i(TAG, "getDataSource()");   
     if (!URLUtil.isNetworkUrl(strPath)) {   
         Log.i(TAG, "getDataSource() It's a wrong URL!");   
     } else {   
         URL myURL = new URL(strPath);   
         URLConnection conn = myURL.openConnection();   
         conn.connect();   
         InputStream is = conn.getInputStream();   
         if (is == null) {   
             throw new RuntimeException("stream is null");   
         }   
         File myTempFile = File.createTempFile(fileNa, "." + fileEx);   
         currentTempFilePath = myTempFile.getAbsolutePath();   
         FileOutputStream fos = new FileOutputStream(myTempFile);   
         byte buf[] = new byte[128];   
         do {   
             int numread = is.read(buf);   
             if (numread <= 0) {   
                 break;   
             }   
             fos.write(buf, 0, numread);   
         } while (true);   
         Log.i(TAG, "getDataSource() Download  ok...");   
         dialog.cancel();   
         dialog.dismiss();   
         openFile(myTempFile);   
         try {   
             is.close();   
         } catch (Exception ex) {   
             Log.e(TAG, "getDataSource() error: " + ex.getMessage(), ex);   
         }   
     }   
    
    }
    private void openFile(File f) {
     Intent intent = new Intent();   
     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);   
     intent.setAction(android.content.Intent.ACTION_VIEW);   
     String type = getMIMEType(f);   
     intent.setDataAndType(Uri.fromFile(f), type);   
     activity.startActivity(intent);   
    
    }
    public void delFile() {
     Log.i(TAG, "The TempFile(" + currentTempFilePath + ") was deleted.");   
     File myFile = new File(currentTempFilePath);   
     if (myFile.exists()) {   
         myFile.delete();   
     }   
    
    }
    private String getMIMEType(File f) {
     String type = "";   
     String fName = f.getName();   
     String end = fName   
             .substring(fName.lastIndexOf(".") + 1, fName.length())   
             .toLowerCase();   
     if (end.equals("m4a") || end.equals("mp3") || end.equals("mid")   
             || end.equals("xmf") || end.equals("ogg") || end.equals("wav")) {   
         type = "audio";   
     } else if (end.equals("3gp") || end.equals("mp4")) {   
         type = "video";   
     } else if (end.equals("jpg") || end.equals("gif") || end.equals("png")   
             || end.equals("jpeg") || end.equals("bmp")) {   
         type = "image";   
     } else if (end.equals("apk")) {   
         type = "application/vnd.android.package-archive";   
     } else {   
         type = "*";   
     }   
     if (end.equals("apk")) {   
     } else {   
         type += "/*";   
     }   
     return type;   
    
    }
    } </pre>
 本文由用戶 3y8nn 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!