zoukankan      html  css  js  c++  java
  • 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;   
        }   
    }  

  • 相关阅读:
    稳扎稳打Silverlight(13) 2.0交互之鼠标事件和键盘事件
    稳扎稳打Silverlight(17) 2.0数据之详解DataGrid, 绑定数据到ListBox
    再接再厉VS 2008 sp1 + .NET 3.5 sp1(2) Entity Framework(实体框架)之详解 Linq To Entities 之一
    稳扎稳打Silverlight(8) 2.0图形之基类System.Windows.Shapes.Shape
    稳扎稳打Silverlight(11) 2.0动画之ColorAnimation, DoubleAnimation, PointAnimation, 内插关键帧动画
    稳扎稳打Silverlight(21) 2.0通信之WebRequest和WebResponse, 对指定的URI发出请求以及接收响应
    稳扎稳打Silverlight(16) 2.0数据之独立存储(Isolated Storage)
    稳扎稳打Silverlight(9) 2.0画笔之SolidColorBrush, ImageBrush, VideoBrush, LinearGradientBrush, RadialGradientBrush
    稳扎稳打Silverlight(23) 2.0通信之调用WCF的双向通信(Duplex Service)
    游戏人生Silverlight(1) 七彩俄罗斯方块[Silverlight 2.0(c#)]
  • 原文地址:https://www.cnblogs.com/tt_mc/p/1825119.html
Copyright © 2011-2022 走看看