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;   
    }   
}  

你可能感兴趣的:(Android版本检测\自动更新)