package com.autoupdate;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.autoupdate.R;/*** 版本检测,自动更新* * @author shenyj-ydrh 1.通过Url检测更新 2.下载并安装更新 3.删除临时路径* */public class MyAutoUpdate {        // 调用更新的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 MyAutoUpdate(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);                        }                }        }        /**         * 打开文件进行安装         *          * @param f         */        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. Android之2D图形(圆、直线、点)工具类 (持续更新)
  2. Android倒计时
  3. android执行Linux命令
  4. Android(安卓)读写文件整理
  5. android 之用Hello World做项目结构分析
  6. Android读取手机联系人且获得联系人手机号+名称
  7. Android中通过当前经纬度获得城市
  8. Android(安卓)读取raw、assets中的txt文件
  9. NPM 和webpack 的基础使用

随机推荐

  1. android菜鸟
  2. android使用Intent操作拨打电话和发送短
  3. Android怎么从设置相册中的照片作背景(刚
  4. android中读取短信
  5. 第五节cocos2dx的jni部分
  6. Android(安卓)实现Activity后台运行
  7. android spinner 每行字体颜色都变化
  8. Android中数据的保存和提取
  9. Android(安卓)WebView图片显示问题
  10. android(javaOO)遇到的小问题