Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 版本檢測

Android 版本檢測

編輯:關於Android編程

[java] 
/**
 * 
 * 版本檢測,自動更新
 * 1.通過Url檢測更新 2.下載並安裝更新 3.刪除臨時路徑
 * 
 */ 
 
public class Update { 
     
    // 調用更新的Activity 
    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:8080/ApiDemos.apk"; 
 
     
    private ProgressDialog dialog; 
 
    /**
     * 
     * 構造方法,獲得當前版本信息
     * 
     * 
     * @param activity
     */ 
    public Update(Activity activity) { 
        this.activity = activity; 
        // 獲得當前版本 
        getCurrentVersion(); 
    } 
 
    /**
     * 
     * 檢測更新
     */ 
    public void check() { 
 
        // 檢測網絡 
        if (isNetworkAvailable(this.activity) == false) { 
            return; 
        } 
 
        // 如果網絡可用,檢測到新版本 
        if (true) { 
            // 彈出對話框,選擇是否需要更新版本 
            showUpdateDialog(); 
        } 
    } 
 
    /**
     * 
     * 檢測是否有可用網絡
     * 
     * 
     * @param context
     * 
     * @return 網絡連接狀態
     */ 
 
    public static boolean isNetworkAvailable(Context context) { 
        try { 
            ConnectivityManager cm = (ConnectivityManager) context 
            .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("新版本").setIcon(R.drawable.ic_launcher) 
        .setMessage("是否更新?") 
        .setPositiveButton("是", new DialogInterface.OnClickListener() { 
            public void onClick(DialogInterface dialog, int which) { 
                // 通過地址下載文件 
                downloadTheFile(strURL); 
                // 顯示更新狀態,進度條 
                showWaitDialog(); 
            } 
        }) 
 
        .setNegativeButton("否", new DialogInterface.OnClickListener() { 
            public void onClick(DialogInterface dialog, int which) { 
                dialog.cancel(); 
            } 
        }).show(); 
    } 
 
    /**
     * 
     * 顯示更新狀態,進度條
     */ 
 
    public void showWaitDialog() { 
        dialog = new ProgressDialog(activity); 
        dialog.setMessage("正在更新,請稍候..."); 
        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(); 
        } 
    } 
 
    /**
     * 
     * 截取文件名稱並執行下載
     * 
     * 
     * @param strPath
     */ 
    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; 
            new Thread(new Runnable() { 
                @Override 
                public void run() { 
                    // TODO Auto-generated method stub 
                    try { 
                        // 執行下載 
                    doDownloadTheFile(strPath); 
                    } catch (Exception e) { 
                        Log.e(TAG, e.getMessage(), e); 
                    } 
                } 
            }).start(); 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
    } 
 
    /**
     * 
     * 執行新版本進行下載,並安裝
     * 
     * 
     * @param strPath
     * 
     * @throws Exception
     */ 
    private void doDownloadTheFile(String strPath) throws Exception { 
        Log.i(TAG, "getDataSource()"); 
        // 判斷strPath是否為網絡地址 
        if (!URLUtil.isNetworkUrl(strPath)) { 
            Log.i(TAG, "服務器地址錯誤!"); 
        } 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(); 
        } 
    } 
 
    /**
     * 
     * 獲得下載文件的類型
     * 
     * 
     * @param f
     * 
     *            文件名稱
     * 
     * @return 文件類型
     */ 
 
    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; 
    } 
 

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