tt_mc

导航

Android版本检测\自动更新

package com.hiyo.game.pdk.tool;   
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;   
    }   
}  

 

posted on 2010-09-13 16:37  tt_mc  阅读(12878)  评论(7编辑  收藏  举报