zoukankan      html  css  js  c++  java
  • Android 在线升级

    1、获取当前安装版本

      //获取当前版本
    public int getVersion(Context context){
            int version = 0;
            try {
                version = context.getPackageManager().getPackageInfo(
                        "项目包名", 0).versionCode;
            } catch (Exception e) {
                System.out.println("获取版本号出错");
            }
            return version;
        }
    //获取当前版本名称
        public String getVersionName(Context context){
            String versionName = null;
            try {
                versionName = context.getPackageManager().getPackageInfo(
                        "项目包名", 0).versionName;
            } catch (Exception e) {
                System.out.println("获取版本名称出错");
            }
            return versionName;
        }
    View Code

    2、检测服务器发布版本,创建一个ver.aspx 页面

    [{"appname":"appName","apkname":"UpdateApp.apk","versionName":"2.0","version":"2"}]
    View Code

    3、检测服务器发布版本

     public String getServerVersion(){
            String serverJson = null;
            byte[] buffer = new byte[128];
            try {
                URL serverURL = new URL(http_url+"/ver.aspx");
                HttpURLConnection connect = (HttpURLConnection) serverURL.openConnection();
                BufferedInputStream bis = new BufferedInputStream(connect.getInputStream());
                int n = 0;
                while((n = bis.read(buffer))!= -1){
                    serverJson = new String(buffer);
                }
            } catch (Exception e) {
                System.out.println("获取服务器版本出错:"+e);
            }
    
            return serverJson;
        }
    View Code
     

    4、版本对比

     public boolean compareVersion(Context context){
    
            final Context contextTemp = context;
    
            new Thread(){
                public void run() {
                    Looper.prepare();
                    String serverJson = manager.getServerVersion();
    
                    //读取json
                    try {
                        JSONArray array = new JSONArray(serverJson);
                        JSONObject object = array.getJSONObject(0);
                        String getServerVersion = object.getString("version");
                        String getServerVersionName = object.getString("versionName");
    
                        SettingPage.serverVersion = Integer.parseInt(getServerVersion);
                        SettingPage.serverVersionName = getServerVersionName;
    
                        if(SettingPage.version < SettingPage.serverVersion){
                           // AlertDialog.Builder builder  = new Builder(contextTemp);
                            AlertDialog.Builder builder = new AlertDialog.Builder(contextTemp,R.style.Dialog);//使用浅色背景 主题
                            builder.setTitle("版本更新" ) ;
                            builder.setMessage("本地版本号:"+SettingPage.versionName
                                    +"
    "+"服务器版本号:"+SettingPage.serverVersionName ) ;
                            builder.setPositiveButton("确认下载",new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int arg1) {
                                    //下载apk
                                    new Thread(){
                                        public void run() {
                                            Looper.prepare();
                                            downloadApkFile(contextTemp);
                                            Looper.loop();
                                        };
                                    }.start();
                                }
                            });
                            builder.setNegativeButton("取消", null);
                            builder.show();
                        }else{
                            AlertDialog.Builder builder  = new Builder(contextTemp);
                            builder.setTitle("提示" ) ;
                            builder.setMessage("当前使用版本为最新版" ) ;
                            builder.setPositiveButton("确定",null);
                            builder.show();
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                        System.out.println("下载出错"+e);
                    }
    
                    Looper.loop();
                };
    
            }.start();
            return false;
        }
    View Code

    5、下载服务器版本

     public void downloadApkFile(Context context){
            String savePath = Environment.getExternalStorageDirectory()+"/UpdateApp.apk";
            String serverFilePath = http_url+"/UpdateApp.apk";//"/AndroidUpdateDemo.png";
            try {
                if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
                    URL serverURL = new URL(serverFilePath);
                    HttpURLConnection connect = (HttpURLConnection) serverURL.openConnection();
                    BufferedInputStream bis = new BufferedInputStream(connect.getInputStream());
                    File apkfile = new File(savePath);
                    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(apkfile));
    
                    int fileLength = connect.getContentLength();
                    int downLength = 0;
                    int progress = 0;
                    int n;
                    byte[] buffer = new byte[1024];
                    while((n=bis.read(buffer, 0, buffer.length))!=-1){
                        bos.write(buffer, 0, n);
                        downLength +=n;
                        progress = (int) (((float) downLength / fileLength) * 100);
                        Message msg = new Message();
                        msg.arg1 = progress;
                        SettingPage.handler.sendMessage(msg);
    
                    }
                    bis.close();
                    bos.close();
                    connect.disconnect();
                }
            } catch (Exception e) {
                System.out.println("下载出错"+e);
            }
        }
    View Code

    6、下载进度提醒

     public class receiveVersionHandler extends Handler {
            @Override
            public void handleMessage(Message msg) {
                proBar.setProgress(msg.arg1);
                 textView.setText("下载进度:"+msg.arg1+"%"+"
    "+"版本名称:"+versionName);
                if(msg.arg1 == 100){
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    String path = Environment.getExternalStorageDirectory()+"/UpdateApp.apk";
                    intent.setDataAndType(Uri.fromFile(new File(path)),
                            "application/vnd.android.package-archive");
                    startActivity(intent);
                }
                //proBar.setVisibility(R.id.button_id_1);
            }
    
        }
    View Code

    7、下载完成后手动安装即可

    完整升级类代码

    public class UpdateManager {
        private static UpdateManager manager = null;
        private static String http_url="http://127.0.0.1";
        private UpdateManager(){}
        public static UpdateManager getInstance(){
            manager = new UpdateManager();
            return manager;
        }
    //获取当前版本号
        public int getVersion(Context context){
            int version = 0;
            try {
                version = context.getPackageManager().getPackageInfo(
                        "项目包名", 0).versionCode;
            } catch (Exception e) {
                System.out.println("获取版本号出错");
            }
            return version;
        }
    //获取当前版本名称
        public String getVersionName(Context context){
            String versionName = null;
            try {
                versionName = context.getPackageManager().getPackageInfo(
                        "项目包名", 0).versionName;
            } catch (Exception e) {
                System.out.println("获取版本名称出错");
            }
            return versionName;
        }
    
        //获取服务器发布的版本
        public String getServerVersion(){
            String serverJson = null;
            byte[] buffer = new byte[128];
            try {
                URL serverURL = new URL(http_url+"/ver.aspx");
                HttpURLConnection connect = (HttpURLConnection) serverURL.openConnection();
                BufferedInputStream bis = new BufferedInputStream(connect.getInputStream());
                int n = 0;
                while((n = bis.read(buffer))!= -1){
                    serverJson = new String(buffer);
                }
            } catch (Exception e) {
                System.out.println("获取服务器版本出错:"+e);
            }
    
            return serverJson;
        }
    
        //版本比较
        public boolean compareVersion(Context context){
    
            final Context contextTemp = context;
    
            new Thread(){
                public void run() {
                    Looper.prepare();
                    String serverJson = manager.getServerVersion();
    
                    //读取json
                    try {
                        JSONArray array = new JSONArray(serverJson);
                        JSONObject object = array.getJSONObject(0);
                        String getServerVersion = object.getString("version");
                        String getServerVersionName = object.getString("versionName");
    
                        SettingPage.serverVersion = Integer.parseInt(getServerVersion);
                        SettingPage.serverVersionName = getServerVersionName;
    
                        if(SettingPage.version < SettingPage.serverVersion){
                           // AlertDialog.Builder builder  = new Builder(contextTemp);
                            AlertDialog.Builder builder = new AlertDialog.Builder(contextTemp,R.style.Dialog);//使用浅色背景 主题
                            builder.setTitle("版本更新" ) ;
                            builder.setMessage("本地版本号:"+SettingPage.versionName
                                    +"
    "+"服务器版本号:"+SettingPage.serverVersionName ) ;
                            builder.setPositiveButton("确认下载",new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int arg1) {
                                    //下载apk
                                    new Thread(){
                                        public void run() {
                                            Looper.prepare();
                                            downloadApkFile(contextTemp);
                                            Looper.loop();
                                        };
                                    }.start();
                                }
                            });
                            builder.setNegativeButton("取消", null);
                            builder.show();
                        }else{
                            AlertDialog.Builder builder  = new Builder(contextTemp);
                            builder.setTitle("提示" ) ;
                            builder.setMessage("当前使用版本为最新版" ) ;
                            builder.setPositiveButton("确定",null);
                            builder.show();
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                        System.out.println("下载出错"+e);
                    }
    
                    Looper.loop();
                };
    
            }.start();
            return false;
        }
    
            //下载apk
        public void downloadApkFile(Context context){
            String savePath = Environment.getExternalStorageDirectory()+"/UpdateApp.apk";
            String serverFilePath = http_url+"/UpdateApp.apk";//"/AndroidUpdateDemo.png";
            try {
                if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
                    URL serverURL = new URL(serverFilePath);
                    HttpURLConnection connect = (HttpURLConnection) serverURL.openConnection();
                    BufferedInputStream bis = new BufferedInputStream(connect.getInputStream());
                    File apkfile = new File(savePath);
                    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(apkfile));
    
                    int fileLength = connect.getContentLength();
                    int downLength = 0;
                    int progress = 0;
                    int n;
                    byte[] buffer = new byte[1024];
                    while((n=bis.read(buffer, 0, buffer.length))!=-1){
                        bos.write(buffer, 0, n);
                        downLength +=n;
                        progress = (int) (((float) downLength / fileLength) * 100);
                        Message msg = new Message();
                        msg.arg1 = progress;
                        SettingPage.handler.sendMessage(msg);
    
                    }
                    bis.close();
                    bos.close();
                    connect.disconnect();
                }
            } catch (Exception e) {
                System.out.println("下载出错"+e);
            }
        }
    }
    View Code

    同时可以参考下面博客,源码实现不同,实现效果大同小异

    http://www.cnblogs.com/coolszy/archive/2012/04/27/2474279.html

  • 相关阅读:
    纪中集训 Day 2
    纪中集训 Day1
    纪中集训 Day 0?
    BZOJ 1033: [ZJOI2008]杀蚂蚁antbuster(模拟)
    BZOJ 3527: [Zjoi2014]力(FFT)
    wikioi 3132 高精度乘法(FFT)
    BZOJ 1085: [SCOI2005]骑士精神(A*算法)
    BZOJ 1009 :[HNOI2008]GT考试(KPM算法+dp+矩阵快速幂)
    BZOJ 1019 :[SHOI2008]汉诺塔(递推)
    BZOJ 1021 :[SHOI2008]Debt 循环的债务 (DP)
  • 原文地址:https://www.cnblogs.com/jerrywublogs/p/7126615.html
Copyright © 2011-2022 走看看