直接贴代码:

config类:

package com.tutor.config;import org.json.JSONArray;import org.json.JSONObject;import com.tutor.update.R;import android.content.Context;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.content.pm.PackageManager.NameNotFoundException;import android.util.Log;public class Config{public String UPDATE_SERVER = "http://10.81.48.181:8080/update/";public String UPDATE_APKNAME = "";public String UPDATE_SAVENAME = "update.apk";public String UPDATE_VERJSON = "ver.json";public static int newVerCode;public static String newVerName;/** * 获取当前版本号 *  * @param context * @return */public int getVerCode(Context context){int verCode = -1;try{// 获取packagemanager的实例PackageManager packageManager = context.getPackageManager();// getPackageName()是你当前类的包名,0代表是获取版本信息PackageInfo packInfo =packageManager.getPackageInfo(context.getPackageName(), 0);verCode = packInfo.versionCode;// verCode =// context.getPackageManager().getPackageInfo(// "com.example.update", 0).versionCode;System.out.println("nowcode---?>>>" + verCode);}catch (NameNotFoundException e){Log.e("RG", e.getMessage());}return verCode;}/** * 获取版本名称 *  * @param context * @return */public String getVerName(Context context){String verName = "";try{// 获取packagemanager的实例PackageManager packageManager = context.getPackageManager();// getPackageName()是你当前类的包名,0代表是获取版本信息PackageInfo packInfo =packageManager.getPackageInfo(context.getPackageName(), 0);verName = packInfo.versionName;// verName =// context.getPackageManager().getPackageInfo(// "com.example.update", 0).versionName;}catch (NameNotFoundException e){Log.e("RG", e.getMessage());}return verName;}// public static String getVerName(Context context)// {// String verName =// context.getResources().getText(R.string.app_versionName)// .toString();// return verName;// }public static String getAppName(Context context){String verName =context.getResources().getText(R.string.app_name).toString();return verName;}/** * 检查服务器的版本 *  * @return */public boolean getServerVerCode(){try{String verjson =NetworkTool.getContent(UPDATE_SERVER + UPDATE_VERJSON);System.out.println("verjson--->>>" + 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");System.out.println("newVerCode--->>>" + newVerCode);System.out.println("newVerName--->>>" + newVerName);}catch (Exception e){newVerCode = -1;newVerName = "";return false;}}}catch (Exception e){Log.e("RG", e.getMessage());return false;}return true;}}
NetworkTool类:

package com.tutor.config;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;public class NetworkTool{public static String getContent(String filename){URL url;String str;try{url = new URL(filename);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.connect();int len = conn.getContentLength();InputStream is = conn.getInputStream();byte[] by = new byte[len];is.read(by);str = new String(by, "UTF-8");return str;}catch (MalformedURLException e){// TODO Auto-generated catch blocke.printStackTrace();return "";}catch (IOException e){// TODO Auto-generated catch blocke.printStackTrace();return "";}}}
UpdateApplication类:

package com.tutor.config;import android.content.Context;public class UpdateApplication{/** * 检查更新状态 *  * @param context * @return */public static boolean getUpdateInfo(Context context){Config cof = new Config();cof.getServerVerCode();if (cof.getVerCode(context) < Config.newVerCode){return true;}else{return false;}}/** * 马上更新 *  * @param context */public static void newUpdate(Context context){UpdateManager mUpdateManager = new UpdateManager(context);mUpdateManager.checkUpdateInfo();}}
UpdateManager类:

package com.tutor.config;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import com.tutor.update.R;import android.app.AlertDialog;import android.app.Dialog;import android.app.AlertDialog.Builder;import android.content.Context;import android.content.DialogInterface;import android.content.Intent;import android.content.DialogInterface.OnClickListener;import android.net.Uri;import android.os.Handler;import android.os.Message;import android.view.LayoutInflater;import android.view.View;import android.widget.ProgressBar;public class UpdateManager{private Context mContext;// 提示语private String updateMsg = "有最新的软件包哦,亲快下载吧~";// 返回的安装包urlprivate String apkUrl = "http://10.81.48.181:8080/update/UpdateDemo.apk";private Dialog noticeDialog;private Dialog downloadDialog;/* 下载包安装路径 */private static final String savePath = "/sdcard/updatedemo/";private static final String saveFileName = savePath+ "UpdateDemoRelease.apk";/* 进度条与通知ui刷新的handler和msg常量 */private ProgressBar mProgress;private static final int DOWN_UPDATE = 1;private static final int DOWN_OVER = 2;private int progress;private Thread downLoadThread;private boolean interceptFlag = false;private Handler mHandler = new Handler(){public void handleMessage(Message msg){switch (msg.what){case DOWN_UPDATE:mProgress.setProgress(progress);break;case DOWN_OVER:installApk();break;default:break;}};};public UpdateManager(Context context){this.mContext = context;}// 外部接口让主Activity调用public void checkUpdateInfo(){showNoticeDialog();}private void showNoticeDialog(){AlertDialog.Builder builder = new Builder(mContext);builder.setTitle("软件版本更新");builder.setMessage(updateMsg);builder.setPositiveButton("下载", new OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which){dialog.dismiss();showDownloadDialog();}});builder.setNegativeButton("以后再说", new OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which){dialog.dismiss();}});noticeDialog = builder.create();noticeDialog.show();}private void showDownloadDialog(){AlertDialog.Builder builder = new Builder(mContext);builder.setTitle("软件版本更新");final LayoutInflater inflater = LayoutInflater.from(mContext);View v = inflater.inflate(R.layout.progress, null);mProgress = (ProgressBar) v.findViewById(R.id.progress);builder.setView(v);builder.setNegativeButton("取消", new OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which){dialog.dismiss();interceptFlag = true;}});downloadDialog = builder.create();downloadDialog.show();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[24];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();}}};/** * 下载apk *  * @param url */private void downloadApk(){downLoadThread = new Thread(mdownApkRunnable);downLoadThread.start();}/** * 安装apk *  * @param url */private void installApk(){if (downloadDialog.isShowing()){downloadDialog.dismiss();}File apkfile = new File(saveFileName);if (!apkfile.exists()){return;}Intent i = new Intent(Intent.ACTION_VIEW);i.setDataAndType(Uri.parse("file://" + apkfile.toString()),"application/vnd.android.package-archive");mContext.startActivity(i);}}
MainAcitivity:

package com.tutor.update;import com.tutor.config.UpdateApplication;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;public class MainAcitivity extends Activity{@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);Button bt = (Button) findViewById(R.id.button1);bt.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View v){if (UpdateApplication.getUpdateInfo(MainAcitivity.this)){UpdateApplication.newUpdate(MainAcitivity.this);}else{Toast.makeText(MainAcitivity.this, "程序已经是最新状态!谢谢使用",Toast.LENGTH_SHORT).show();}}});}}



更多相关文章

  1. 下载管理器类的封装(观察者模式)
  2. 百度地图实现拖动图标输入地址
  3. android获取manifast.xml里面meta信息
  4. android获取网页数据的几种方式
  5. Android:UI更新方法三:Handler+Worker Thread
  6. android 高德地图定位(地理位置) 笔记
  7. Android(安卓)版本号等等获取
  8. 使用AnsyncTask异步类从网络上下载图片
  9. the android development environment

随机推荐

  1. 用户 jb51net 登录失败。原因: 该帐户的
  2. 聚焦 Android(安卓)11: Google Play 应用
  3. Android(安卓)屏幕适配:最全面的解决方案
  4. Android(安卓)内存限制
  5. Android——一个简单的银行系统
  6. Android(安卓)Drawable 分类笔记
  7. Android——全局获取Context
  8. Android(安卓)Automotive 车载应用对驾驶
  9. Android(安卓)MPAndroidChart--使用柱状
  10. GreenDao 3.0 简介、使用及踩坑