Android 版本更新

来源:互联网 发布:sql中decode 编辑:程序博客网 时间:2024/06/14 02:39

1、添加权限

<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WRITE_SETTINGS" />


2、写一个工具类方法,UpdateManager.java,说明写的够详细了,易理解,弹出框为我自定义的。

public class UpdateManager {private Context mContext;/*安装提示语*/private String updateMsg = "有最新的软件包哦,亲快下载吧~";/*安装包URL*/private String apkUrl;/* 下载包安装路径 */private static final String savePath = "/sdcard/updatedownload/";/*下载包名字*/private static final String saveFileName = savePath.trim()+ "sunday.apk".trim();/* 进度条与通知ui刷新的handler和msg常量 */private ProgressBar mProgress;/*下载进度*/private static final int DOWN_UPDATE = 1;/*下载完成*/private static final int DOWN_OVER = 2;/*用于更新下载的进度*/private int progress;/* 下载APK的线程 */private Thread downLoadThread;/* 新版本更新内容 */private String message;/* 最新版本的版本号 */private String lastVersion;private boolean interceptFlag = false;/** * handler通知 */private Handler mHandler = new Handler() {public void handleMessage(Message msg) {switch (msg.what) {case DOWN_UPDATE:mProgress.setProgress(progress);//下载进度break;case DOWN_OVER:installApk();//下载完成,进行安装APKbreak;default:break;}};};/** * @param apkUrl *            软件URL * @param message *            软件升级日志(有哪些功能更新) * @param lastVersion *            升级的最新版本 * @Description: TODO * @author Sunday * @date 2016年1月6日 */public UpdateManager(Context context, String apkUrl, String message,String lastVersion) {this.mContext = context;this.apkUrl = apkUrl;this.message = message;this.lastVersion = lastVersion;}/** *  * @Description: TODO 外部接口让主Activity调用 * @author Sunday * @date 2016年1月7日 */public void checkUpdateInfo() {showNoticeDialog();}/** *  * @Description: TODO 升级提示对话框 * @author Sunday * @date 2016年1月6日 */private void showNoticeDialog() {final CommonDialog commonDialog = new CommonDialog(mContext);commonDialog.show();commonDialog.setCancel(true, "检测到您有新的版本可以更新" + lastVersion);commonDialog.setUpdateMessage(message);commonDialog.setCanceledOnTouchOutside(false);commonDialog.setDialog_cancel_text("稍后更新");commonDialog.setDialog_ok_text("立即更新");commonDialog.setBtnOnClick(new OnClickListener() {@Overridepublic void onClick(View v) {showDownloadDialog();commonDialog.dismiss();}});}/** *  * @Description: TODO 显示下载进度对话框 * @author Sunday * @date 2016年1月6日 */private void showDownloadDialog() {final CommonDialog commonDialog = new CommonDialog(mContext);commonDialog.show();mProgress = commonDialog.getmProgressBar();commonDialog.showProgress();commonDialog.goneTv_message();commonDialog.setDialog_ok_text("取消");commonDialog.setCancelable(false);commonDialog.setCanceledOnTouchOutside(false);commonDialog.setCancel(false, "正在为您下载最新版本");commonDialog.setBtnOnClick(new OnClickListener() {@Overridepublic void onClick(View v) {commonDialog.dismiss();interceptFlag = true;}});downloadApk();}/** * 开启线程下载 */private Runnable mdownApkRunnable = new Runnable() {@Overridepublic void run() {try {URL url = new URL(apkUrl);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.connect();int length = conn.getContentLength();InputStream is = conn.getInputStream();File file = new File(savePath);if (!file.exists()) {file.mkdir();}String apkFile = saveFileName;File ApkFile = new File(apkFile);FileOutputStream fos = new FileOutputStream(ApkFile);int count = 0;byte buf[] = new byte[1024];do {int numread = is.read(buf);count += numread;progress = (int) (((float) count / length) * 100);// 更新进度mHandler.sendEmptyMessage(DOWN_UPDATE);if (numread <= 0) {// 下载完成通知安装mHandler.sendEmptyMessage(DOWN_OVER);break;}fos.write(buf, 0, numread);} while (!interceptFlag);// 点击取消就停止下载.fos.close();is.close();} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}};/** *  * @Description: TODO 进行下载APK * @author Sunday * @date 2016年1月7日 */private void downloadApk() {downLoadThread = new Thread(mdownApkRunnable);downLoadThread.start();}/** *  * @Description: TODO 进行安装APK * @author Sunday * @date 2016年1月7日 */private void installApk() {File apkfile = new File(saveFileName);if (!apkfile.exists()) {return;}Intent i = new Intent(Intent.ACTION_VIEW);i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);i.setDataAndType(Uri.parse("file://" + apkfile.toString()),"application/vnd.android.package-archive");mContext.startActivity(i);}}

3、写一个检测是否有新版本的类,CheckUpdateManager.java

public class CheckUpdateManager implements ICallBackJson {private Context context;private WebHttpConnection webHttpConnection;private VersionEntity app;/* 判断是否是从首页调用该方法 */private int flag;public CheckUpdateManager(Context context, int flag) {this.context = context;webHttpConnection = new WebHttpConnection(this);this.flag = flag;}/** *  * @Description: TODO 访问网络接口,获得服务器端App版本 * @param * @return void * @throws * @author Sunday * @date 2016年1月6日 */public void checkVersion() {webHttpConnection.getValue(ApiHttpAddress.UPDATA_VERSION, 1);}/** *  * @Description: TODO 进行更新版本 * @param @param app * @return void * @throws * @author Sunday * @date 2016年1月7日 */protected void UpdateVersion(VersionEntity app) {if (null == app) {return;}PackageManager pm = context.getPackageManager();PackageInfo pinfo = null;try {pinfo = pm.getPackageInfo(context.getPackageName(),PackageManager.GET_CONFIGURATIONS);} catch (NameNotFoundException e) {e.printStackTrace();}int versionCode = pinfo.versionCode;Log.e("服务器版本", app.getVersion());Log.e("本机版本", String.valueOf(versionCode));if (Integer.parseInt(app.getVersion()) > versionCode) {UpdateManager mUpdateManager = new UpdateManager(context,app.getUrl(), "", "");mUpdateManager.checkUpdateInfo();} else {if (1 == flag) {Toast.makeText(context, "已经是最新版本", Toast.LENGTH_LONG).show();}}}/* * 网络请求失败回调 */@Overridepublic void requestJsonOnError(int msgFlag) {// TODO Auto-generated method stub((BaseActivity) context).cancelProgressDialog();Log.e("msgFlag", String.valueOf(msgFlag));}/* * 网络请求成功回调 */@Overridepublic void requestJsonOnSucceed(String json, int msgFlag) {// TODO Auto-generated method stub((BaseActivity) context).cancelProgressDialog();if (1 == msgFlag) {app = JSON.parseObject(json, VersionEntity.class);if (null != app)UpdateVersion(app);}}}

首页需调用的方法检测版本更新

void checkUpdate() {new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubCheckUpdateManager mCheckUpdateManager = new CheckUpdateManager(mContext, 0);mCheckUpdateManager.checkVersion();}}).start();}


点击打开链接

1 0
原创粉丝点击