不多废话直接帖代码
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 自动检测更新 连接公司服务,在程序登录或者管理中进行检测,提示,检测是否有新版本,并能选择同一版本不再提示,有网络例子和个人整理,及可能扩展提示
作 者: 张思民 著 ...《21世纪高等学校计算机基础实用规划教材:Android应用程序设计》可以作为高等院校及各类培训学校Android系统课程的教材,也可以作为学习Android程序设计的编程人员的自学用书。
很多的Android应用都具有版本检测和自动更新的功能,用户一键就可以完成软件的升级和更新。Android应用程序的升级本质上是利用了Linux系统的软件包管理和安装机制,而对于上层这一功能的开发来说很容易,只需要我们...
OpenCV-Android运动目标检测.zip资源matlab opencv运动目标检测程序资料OpenCV-Android运动目标检测.zip资源matlab opencv运动目标检测程序资料OpenCV-Android运动目标检测.zip资源matlab opencv运动目标检测程序...
根据服务器返回的版本信息检测并自动下载更新程序
恶意软件的检测又可分为恶意行为的检测和恶意代码的检测,提出按SVM算法应用到的检测领域分类,分别对其应用于Android应用程序中的恶意行为检测、恶意代码检测和漏洞检测等方面的研究进行分析与讨论,总结了当前该...
Android apk发布到google play上检测google play的新版本,并且下载更新
自己做了个android程序的自动检测更新,这里没有服务器的java文件,仅在客户端操作,apk包存放在FTP服务上,内有注释说明。 1.检测是否有更新 2.下载apk包 3.安装apk 4.重新启动
面对恶意软件的威胁,Android 使用了一套应用程序安全框架来保护安全。...一旦恶意程序躲过安装时检查,在恶意程序运行时 Android 安全机制不能及时做出反应。本文针对这个问题提出了基于上下文的运行时检测方案。
Android程序安全检测模型.pdf
一般android app应用程序会隔一段时间发布一个新的版本,包括新增功能和修复原程序bug,当你打开某个app,如果检测到有最新的版本,会提醒你是否下载更新。
1. 光盘中包含《Android程序设计基础》一书的所有示例源代码。所有的代码源文件以Android工程的形式按照章节分别存放在对应的路径下。如第2章的示例代码统一保存在路径“第2章”下。 2. 如果使用示例代码演示,将...
该文档,主要正对 Android 程序存在的漏洞,提供了一套安全检查的标准。
但如果每次开启程序,都要先检测一轮,是一种浪费,毕竟版本更新是小概率的事情。或许可以程序开启的时候,判断一下时间,单日就检测,双日就不检测,或者随机什么的,降低一下检测的频率? 我采取的做法是将检测...
android检测版本自动更新并弹出对话框提示用户下载,带有进度条,服务端解析xml,已测过好多次,主要包名更签名!
Android恶意软件检测使用机器学习是一种检测和分类Android设备恶意应用程序的方法。识别可疑应用程序的一种精确方法是监控android设备所连接的网络。机器学习是人工智能的一个子集,它专注于开发可以访问数据并使用...
基于textCNN模型的Android恶意程序检测.pdf
Qt3写的Android手机屏检测程序,全屏显示各种基础色,来发现屏幕上有无坏点!环境配置及相关入门可以参考以下两篇文章:http://blog.csdn.net/foruok/article/details/23528293 和 ...