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
                                +"\n"+"服务器版本号:"+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+"%"+"\n"+"版本名称:"+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
                                +"\n"+"服务器版本号:"+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

 

转载于:https://www.cnblogs.com/jerrywublogs/p/7126615.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 在线升级 Demo 是一个展示 Android 应用程序在线升级的示例程序。在线升级是指在用户设备上通过网络下载并安装应用程序的更新版本。下面是一个简单的 Demo 的实现步骤: 1. 创建一个基础的 Android 应用程序,并确定其中需要进行在线升级的模块。 2. 在应用程序中添加在线升级的功能模块。这个功能模块应该包括能够检查服务器上是否存在新的应用程序版本的功能,以及能够下载和安装应用程序更新的功能。 3. 在服务器上搭建一个存放应用程序更新文件的下载中心。在服务器端,需要提供一个接口供应用程序向服务器请求最新的应用程序版本信息,并提供应用程序下载链接的功能。 4. 在应用程序中实现向服务器请求最新应用程序版本信息和下载链接的功能。可以使用 HTTP 或者其他通信库来发送请求并解析服务器返回的数据。 5. 在应用程序中实现下载和安装应用程序更新的功能。可以使用 Android 系统提供的下载管理器来下载应用程序更新文件,并通过隐式 Intent 打开应用程序更新文件进行安装。 6. 安装完成后,需要提示用户重启应用程序,使得新版本生效。 7. 在应用程序中保留一个版本号的记录,每次检查新版本时与服务器端返回的版本号进行对比,如果有新版本则进行下载和安装。 通过上述步骤,我们可以实现一个基本的 Android 在线升级 Demo。用户只需要打开应用程序,并检查是否有新版本可用,然后通过点击下载、安装等操作,即可完成应用程序的在线升级

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值