研究了下Android的更新程序的写法,学习了以下这篇文章
App自动更新之通知栏下载:http://www.cnblogs.com/qianxudetianxia/archive/2011/04/12/2010919.html
文章没有源码可以下载看,我自己研究学习了,附上源码并说下我的做法那不同。
一.在initGlobal()方法中
原来是这样写
public void initGlobal(){
try{
Global.localVersion = getPackageManager().getPackageInfo(getPackageName(),0).versionCode; //设置本地版本号
Global.serverVersion = 1;//假定服务器版本为2,本地版本默认是1
}catch (Exception ex){
ex.printStackTrace();
}
}
因为服务器的版本号在这里是写的比较固定了,如果程序是写在客户端的,不能随便就能修改, 我的做法呢,就是在服务器端里,返回服务器的最新的版本号。
我的initGlobal写法是,去了Global.serverVersion
public void initGlobal(){
try {
//设置本地版本号
Global.localVersion = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;
} catch (Exception e) {
// TODO: handle exception
}
}
然后呢,在SubwayActivity的onCreate方法里,向服务器发送一个检测版本的方法,就得到一个服务器最新的版本号
SubwayActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Global.serverVersion=Integer.parseInt(check());
checkVersion();
}
//获取服务器程序的版本号
public String check(){
String url = HttpUtil.BASE_URL;
return HttpUtil.getHTTPUtil().queryStringForPost(url);
}
HttpUtil这个类,是封装了发送请求的方法,你只要改一个BASE_URL,换成自己的就行了。
二.updateService这个类呢,里面有个onStartCommand方法,SDK5以后才有这个方法。
三.AndroidManifest.xml
要注册updateService还要加上SupwayApplication
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.chaowen.subwap.startup"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="5" />
<application android:icon="@drawable/icon" android:label="@string/app_name" android:name=".SupwayApplication">
<activity android:name=".SubwayActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:enabled="true" android:name="com.chaowen.update.updateService" />
</application>
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
后台的servlet
package com.cnjmwl.scm.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.cnjmwl.scm.util.ResponseTemplateHelper;
public class UpdateServlet extends HttpServlet {
// Process the HTTP Get request
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
// Process the HTTP Post request
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//检测版本更新
PrintWriter out = response.getWriter();
out.print("2");
}
}