说到android的版本更新,要写一个出来还是需要耗费一点时间的,这次我们来写一个版本更新服务,用户进入app后有新版本需要更新则提示用户确认更新,更新在后台运行,不影响用户的正常操作,用户体验相对较好。
Android版本更新的步骤:
1、获取当前app版本号,代码如下
public String getAppVersion() {
try {
PackageInfo packinfo = pm.getPackageInfo(context.getPackageName(),0);
return packinfo.versionName;
} catch (NameNotFoundException e) {
e.printStackTrace();
}
return "1.0";
}
2、从服务器获取版本号,并与当前版本进行对比,如果相同则不更新,如果服务器版本号大于当前版本号,弹出更新对话框,提示用户进行更新升级。弹出对话框今天就不在这里写了,这部分代码相对还是比较简单的,当然如果我们需要一个比较好看的对话框,系统提供的原生对话框是不能满足我们的需求的,需要自定义对话框,读者可以自己去研究这方面的代码。
3、用户确认进行版本更新后,将从服务器下载更新的apk并进行自动升级。此处就用到了我们今天说到的版本更新服务,具体代码如下,部分代码已经做了注释,就不详细说明了。
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
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.CoreConnectionPNames;
import com.ygwaimai.manage.R;
import com.ygwaimai.manage.util.AppInfo;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
import android.widget.RemoteViews;
import android.widget.Toast;
public class UpdateService extends Service {
private NotificationManager nm;
private Notification notification;
private File tempFile = null;
private boolean cancelUpdate = false;
private MyHandler myHandler;
private int download_precent = 0;
private RemoteViews views;
private int notificationId = 1234;
private int appicon;
public static final int TIME_OUT_MILL = 50000;// 超时毫秒数
private static final String DOWNLOAD_APK_PATH = "APK_UPDATE";
//更新进度标记
private static final int UPDATE_DOWNLOAD_PRECENCE = 3;
//下载完成标记
private static final int DOWNLOAD_FINISH = 2;
//下载APK失败标记
private static final int DOWNLOAD_FAIL = 4;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onStart(Intent i