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;
}
2、检测服务器发布版本,创建一个ver.aspx 页面

[{"appname":"appName","apkname":"UpdateApp.apk","versionName":"2.0","version":"2"}]
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;
}
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;
}
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);
}
}
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);
}
}
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);
}
}
}
同时可以参考下面博客,源码实现不同,实现效果大同小异
http://www.cnblogs.com/coolszy/archive/2012/04/27/2474279.html
来源:https://www.cnblogs.com/jerrywublogs/p/7126615.html
