`

android程序检查更新

 
阅读更多

不多废话直接帖代码

package com.cloud.update;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.json.JSONArray;
import org.json.JSONObject;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.util.Log;

public class UpdateActivity extends Activity {
        private static final String TAG = "Update";
        public ProgressDialog pBar;
        private Handler handler = new Handler();
        private Config config;
        private static String packgeName;
        private int newVerCode = 0;
        private String newVerName = "";

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                packgeName = this.getPackageName();
                if (getServerVerCode()) {
                        int vercode = UpdateActivity.getVerCode(this);
                        if (newVerCode > vercode) {
                                doNewVersionUpdate();
                        } else {
                                notNewVersionShow();
                        }
                }

        }

        private boolean getServerVerCode() {
                try {
                        String verjson = UpdateActivity.getContent(config.UPDATE_SERVER
                                        + config.UPDATE_VERJSON);
                        JSONArray array = new JSONArray(verjson);
                        if (array.length() > 0) {
                                JSONObject obj = array.getJSONObject(0);
                                try {
                                        newVerCode = Integer.parseInt(obj.getString("verCode"));
                                        newVerName = obj.getString("verName");
                                } catch (Exception e) {
                                        newVerCode = -1;
                                        newVerName = "";
                                        return false;
                                }
                        }
                } catch (Exception e) {
                        Log.e(TAG, e.getMessage());
                        return false;
                }
                return true;
        }

        private void notNewVersionShow() {
                int verCode = UpdateActivity.getVerCode(this);
                String verName = UpdateActivity.getVerName(this);
                StringBuffer sb = new StringBuffer();
                sb.append("当前版本:");
                sb.append(verName);
                sb.append(" Code:");
                sb.append(verCode);
                sb.append(",\n已是最新版,无需更新!");
                Dialog dialog = new AlertDialog.Builder(UpdateActivity.this)
                                .setTitle("软件更新").setMessage(sb.toString())// 设置内容
                                .setPositiveButton("确定",// 设置确定按钮
                                                new DialogInterface.OnClickListener() {

                                                        @Override
                                                        public void onClick(DialogInterface dialog,
                                                                        int which) {
                                                                finish();
                                                        }

                                                }).create();// 创建
                // 显示对话框
                dialog.show();
        }

        private void doNewVersionUpdate() {
                int verCode = UpdateActivity.getVerCode(this);
                String verName = UpdateActivity.getVerName(this);
                StringBuffer sb = new StringBuffer();
                sb.append("当前版本:");
                sb.append(verName);
                sb.append(" Code:");
                sb.append(verCode);
                sb.append(", 发现新版本:");
                sb.append(newVerName);
                sb.append(" Code:");
                sb.append(newVerCode);
                sb.append(", 是否更新?");
                Dialog dialog = new AlertDialog.Builder(UpdateActivity.this)
                                .setTitle("软件更新")
                                .setMessage(sb.toString())
                                // 设置内容
                                .setPositiveButton("更新",// 设置确定按钮
                                                new DialogInterface.OnClickListener() {

                                                        @Override
                                                        public void onClick(DialogInterface dialog,
                                                                        int which) {
                                                                pBar = new ProgressDialog(UpdateActivity.this);
                                                                pBar.setTitle("正在下载");
                                                                pBar.setMessage("请稍候...");
                                                                pBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                                                                downFile(config.UPDATE_SERVER
                                                                                + config.UPDATE_APKNAME);
                                                        }

                                                })
                                .setNegativeButton("暂不更新",
                                                new DialogInterface.OnClickListener() {
                                                        public void onClick(DialogInterface dialog,
                                                                        int whichButton) {
                                                                // 点击"取消"按钮之后退出程序
                                                                finish();
                                                        }
                                                }).create();// 创建
                // 显示对话框
                dialog.show();
        }

        void downFile(final String url) {
                pBar.show();
                new Thread() {
                        public void run() {
                                HttpClient client = new DefaultHttpClient();
                                HttpGet get = new HttpGet(url);
                                HttpResponse response;
                                try {
                                        response = client.execute(get);
                                        HttpEntity entity = response.getEntity();
                                        long length = entity.getContentLength();
                                        InputStream is = entity.getContent();
                                        FileOutputStream fileOutputStream = null;
                                        if (is != null) {

                                                File file = new File(
                                                                Environment.getExternalStorageDirectory(),
                                                                config.UPDATE_SAVENAME);
                                                fileOutputStream = new FileOutputStream(file);

                                                byte[] buf = new byte[1024];
                                                int ch = -1;
                                                int count = 0;
                                                while ((ch = is.read(buf)) != -1) {
                                                        fileOutputStream.write(buf, 0, ch);
                                                        count += ch;
                                                        if (length > 0) {
                                                        }
                                                }

                                        }
                                        fileOutputStream.flush();
                                        if (fileOutputStream != null) {
                                                fileOutputStream.close();
                                        }
                                        down();
                                } catch (ClientProtocolException e) {
                                        e.printStackTrace();
                                } catch (IOException e) {
                                        e.printStackTrace();
                                }
                        }

                }.start();

        }

        void down() {
                handler.post(new Runnable() {
                        public void run() {
                                pBar.cancel();
                                update();
                        }
                });

        }

        void update() {

                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setDataAndType(Uri.fromFile(new File(Environment
                                .getExternalStorageDirectory(), config.UPDATE_SAVENAME)),
                                "application/vnd.android.package-archive");
                startActivity(intent);
        }
        public void setConfig(Config config) {
        	this.config = config;
		}  
        public class Config {
            private static final String TAG = "Config";
            
            public String UPDATE_SERVER;
            public String UPDATE_APKNAME;
            public String UPDATE_VERJSON;
            public String UPDATE_SAVENAME;
            public Config(String UPDATE_SERVER,String UPDATE_APKNAME,String UPDATE_VERJSON,String UPDATE_SAVENAME) {
				this.UPDATE_APKNAME = UPDATE_APKNAME;
				this.UPDATE_SAVENAME = UPDATE_SAVENAME;
				this.UPDATE_SERVER = UPDATE_SERVER;
				this.UPDATE_VERJSON = UPDATE_VERJSON;
			}
			public String getUPDATE_SERVER() {
				return UPDATE_SERVER;
			}
			public void setUPDATE_SERVER(String uPDATESERVER) {
				UPDATE_SERVER = uPDATESERVER;
			}
			public String getUPDATE_APKNAME() {
				return UPDATE_APKNAME;
			}
			public void setUPDATE_APKNAME(String uPDATEAPKNAME) {
				UPDATE_APKNAME = uPDATEAPKNAME;
			}
			public String getUPDATE_VERJSON() {
				return UPDATE_VERJSON;
			}
			public void setUPDATE_VERJSON(String uPDATEVERJSON) {
				UPDATE_VERJSON = uPDATEVERJSON;
			}
			public String getUPDATE_SAVENAME() {
				return UPDATE_SAVENAME;
			}
			public void setUPDATE_SAVENAME(String uPDATESAVENAME) {
				UPDATE_SAVENAME = uPDATESAVENAME;
			}
            
        }
        
     public static int getVerCode(Context context) {
            int verCode = -1;
            try {
                    verCode = context.getPackageManager().getPackageInfo(
                    		packgeName, 0).versionCode;
            } catch (NameNotFoundException e) {
                    Log.e(TAG, e.getMessage());
            }
            return verCode;
    }
    
    public static String getVerName(Context context) {
            String verName = "";
            try {
                    verName = context.getPackageManager().getPackageInfo(
                    		packgeName, 0).versionName;
            } catch (NameNotFoundException e) {
                    Log.e(TAG, e.getMessage());
            }
            return verName; 

    }
    
    
    /**
    * 获取网址内容
    * @param url
    * @return
    * @throws Exception
    */
    public static String getContent(String url) throws Exception{
        StringBuilder sb = new StringBuilder();
        
        HttpClient client = new DefaultHttpClient();
        HttpParams httpParams = client.getParams();
        //设置网络超时参数
        HttpConnectionParams.setConnectionTimeout(httpParams, 3000);
        HttpConnectionParams.setSoTimeout(httpParams, 5000);
        HttpResponse response = client.execute(new HttpGet(url));
        HttpEntity entity = response.getEntity();
        if (entity != null) {
            BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8"), 8192);
            
            String line = null;
            while ((line = reader.readLine())!= null){
                sb.append(line + "\n");
            }
            reader.close();
        }
        return sb.toString();
    } 
}

只需继承该activity并且调用setConfig()即可

package com.cloud.update;

import android.os.Bundle;

public class SonActivity extends UpdateActivity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		
		String UPDATE_SERVER = "http://192.168.1.228:8080/OnLineStudy/";
		String UPDATE_APKNAME = "UpdateDemo.apk";
        String UPDATE_VERJSON = "ver.txt";
        String UPDATE_SAVENAME = "updateapksamples.apk";
		setConfig(new Config(UPDATE_SERVER,UPDATE_APKNAME,UPDATE_VERJSON,UPDATE_SAVENAME));
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
	}
}

service端新建一个web项目把ver.txt和应用程序放在webroot目录下即可

ver.txt 内容:[{"appname":"UpdateDemo","apkname":"UpdateDemo.apk","verName":1.0.1,"verCode":2}]


参考:http://blog.csdn.net/xjanker2/article/details/6303937(其实大部分就是参考这个)


分享到:
评论

相关推荐

    android 程序自动检测更新

    用于android程序自动检测更新,里面包含检测是否有更新,有更新可以选择更新

    android 程序自动更新

    android 自动检测更新 连接公司服务,在程序登录或者管理中进行检测,提示,检测是否有新版本,并能选择同一版本不再提示,有网络例子和个人整理,及可能扩展提示

    Android应用程序设计 (张思民 编著) pdf

    作 者: 张思民 著 ...《21世纪高等学校计算机基础实用规划教材:Android应用程序设计》可以作为高等院校及各类培训学校Android系统课程的教材,也可以作为学习Android程序设计的编程人员的自学用书。

    Android应用程序的自动更新升级

    很多的Android应用都具有版本检测和自动更新的功能,用户一键就可以完成软件的升级和更新。Android应用程序的升级本质上是利用了Linux系统的软件包管理和安装机制,而对于上层这一功能的开发来说很容易,只需要我们...

    OpenCV-Android运动目标检测.zip资源matlab opencv运动目标检测程序资料

    OpenCV-Android运动目标检测.zip资源matlab opencv运动目标检测程序资料OpenCV-Android运动目标检测.zip资源matlab opencv运动目标检测程序资料OpenCV-Android运动目标检测.zip资源matlab opencv运动目标检测程序...

    Android 程序自动更新

    根据服务器返回的版本信息检测并自动下载更新程序

    论文研究-基于SVM的Android应用程序安全检测综述.pdf

    恶意软件的检测又可分为恶意行为的检测和恶意代码的检测,提出按SVM算法应用到的检测领域分类,分别对其应用于Android应用程序中的恶意行为检测、恶意代码检测和漏洞检测等方面的研究进行分析与讨论,总结了当前该...

    Android apk自动更新版本程序

    Android apk发布到google play上检测google play的新版本,并且下载更新

    android客户端自动检测更新

    自己做了个android程序的自动检测更新,这里没有服务器的java文件,仅在客户端操作,apk包存放在FTP服务上,内有注释说明。 1.检测是否有更新 2.下载apk包 3.安装apk 4.重新启动

    Android应用程序框架安全机制研究及改进

    面对恶意软件的威胁,Android 使用了一套应用程序安全框架来保护安全。...一旦恶意程序躲过安装时检查,在恶意程序运行时 Android 安全机制不能及时做出反应。本文针对这个问题提出了基于上下文的运行时检测方案。

    Android程序安全检测模型.pdf

    Android程序安全检测模型.pdf

    android app版本自动检测、更新

    一般android app应用程序会隔一段时间发布一个新的版本,包括新增功能和修复原程序bug,当你打开某个app,如果检测到有最新的版本,会提醒你是否下载更新。

    《Android程序设计基础》示例源代码

    1. 光盘中包含《Android程序设计基础》一书的所有示例源代码。所有的代码源文件以Android工程的形式按照章节分别存放在对应的路径下。如第2章的示例代码统一保存在路径“第2章”下。 2. 如果使用示例代码演示,将...

    Android 程序安全漏洞检查

    该文档,主要正对 Android 程序存在的漏洞,提供了一套安全检查的标准。

    android 版本检测 Android程序的版本检测与更新实现介绍

    但如果每次开启程序,都要先检测一轮,是一种浪费,毕竟版本更新是小概率的事情。或许可以程序开启的时候,判断一下时间,单日就检测,双日就不检测,或者随机什么的,降低一下检测的频率? 我采取的做法是将检测...

    android自动检测版本并更新下载,带进度条服务端解析xml

    android检测版本自动更新并弹出对话框提示用户下载,带有进度条,服务端解析xml,已测过好多次,主要包名更签名!

    基于机器学习的Android恶意软件检测数据集

    Android恶意软件检测使用机器学习是一种检测和分类Android设备恶意应用程序的方法。识别可疑应用程序的一种精确方法是监控android设备所连接的网络。机器学习是人工智能的一个子集,它专注于开发可以访问数据并使用...

    基于textCNN模型的Android恶意程序检测.pdf

    基于textCNN模型的Android恶意程序检测.pdf

    Qt3 Android屏幕检测程序

    Qt3写的Android手机屏检测程序,全屏显示各种基础色,来发现屏幕上有无坏点!环境配置及相关入门可以参考以下两篇文章:http://blog.csdn.net/foruok/article/details/23528293 和 ...

Global site tag (gtag.js) - Google Analytics