Android 版本检测

    /** 
     *  
     * 版本检测,自动更新 
     * 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;  
        }  
      
    }  

来源:http://blog.youkuaiyun.com/t80t90s/article/details/7946958



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值