Android 版本更新

你的名字 2022-08-19 08:24 331阅读 0赞

1、添加权限

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

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

  1. public class UpdateManager {
  2. private Context mContext;
  3. /*安装提示语*/
  4. private String updateMsg = "有最新的软件包哦,亲快下载吧~";
  5. /*安装包URL*/
  6. private String apkUrl;
  7. /* 下载包安装路径 */
  8. private static final String savePath = "/sdcard/updatedownload/";
  9. /*下载包名字*/
  10. private static final String saveFileName = savePath.trim()
  11. + "sunday.apk".trim();
  12. /* 进度条与通知ui刷新的handler和msg常量 */
  13. private ProgressBar mProgress;
  14. /*下载进度*/
  15. private static final int DOWN_UPDATE = 1;
  16. /*下载完成*/
  17. private static final int DOWN_OVER = 2;
  18. /*用于更新下载的进度*/
  19. private int progress;
  20. /* 下载APK的线程 */
  21. private Thread downLoadThread;
  22. /* 新版本更新内容 */
  23. private String message;
  24. /* 最新版本的版本号 */
  25. private String lastVersion;
  26. private boolean interceptFlag = false;
  27. /**
  28. * handler通知
  29. */
  30. private Handler mHandler = new Handler() {
  31. public void handleMessage(Message msg) {
  32. switch (msg.what) {
  33. case DOWN_UPDATE:
  34. mProgress.setProgress(progress);//下载进度
  35. break;
  36. case DOWN_OVER:
  37. installApk();//下载完成,进行安装APK
  38. break;
  39. default:
  40. break;
  41. }
  42. }
  43. ;
  44. };
  45. /**
  46. * @param apkUrl
  47. * 软件URL
  48. * @param message
  49. * 软件升级日志(有哪些功能更新)
  50. * @param lastVersion
  51. * 升级的最新版本
  52. * @Description: TODO
  53. * @author Sunday
  54. * @date 2016年1月6日
  55. */
  56. public UpdateManager(Context context, String apkUrl, String message,
  57. String lastVersion) {
  58. this.mContext = context;
  59. this.apkUrl = apkUrl;
  60. this.message = message;
  61. this.lastVersion = lastVersion;
  62. }
  63. /**
  64. *
  65. * @Description: TODO 外部接口让主Activity调用
  66. * @author Sunday
  67. * @date 2016年1月7日
  68. */
  69. public void checkUpdateInfo() {
  70. showNoticeDialog();
  71. }
  72. /**
  73. *
  74. * @Description: TODO 升级提示对话框
  75. * @author Sunday
  76. * @date 2016年1月6日
  77. */
  78. private void showNoticeDialog() {
  79. final CommonDialog commonDialog = new CommonDialog(mContext);
  80. commonDialog.show();
  81. commonDialog.setCancel(true, "检测到您有新的版本可以更新" + lastVersion);
  82. commonDialog.setUpdateMessage(message);
  83. commonDialog.setCanceledOnTouchOutside(false);
  84. commonDialog.setDialog_cancel_text("稍后更新");
  85. commonDialog.setDialog_ok_text("立即更新");
  86. commonDialog.setBtnOnClick(new OnClickListener() {
  87. @Override
  88. public void onClick(View v) {
  89. showDownloadDialog();
  90. commonDialog.dismiss();
  91. }
  92. });
  93. }
  94. /**
  95. *
  96. * @Description: TODO 显示下载进度对话框
  97. * @author Sunday
  98. * @date 2016年1月6日
  99. */
  100. private void showDownloadDialog() {
  101. final CommonDialog commonDialog = new CommonDialog(mContext);
  102. commonDialog.show();
  103. mProgress = commonDialog.getmProgressBar();
  104. commonDialog.showProgress();
  105. commonDialog.goneTv_message();
  106. commonDialog.setDialog_ok_text("取消");
  107. commonDialog.setCancelable(false);
  108. commonDialog.setCanceledOnTouchOutside(false);
  109. commonDialog.setCancel(false, "正在为您下载最新版本");
  110. commonDialog.setBtnOnClick(new OnClickListener() {
  111. @Override
  112. public void onClick(View v) {
  113. commonDialog.dismiss();
  114. interceptFlag = true;
  115. }
  116. });
  117. downloadApk();
  118. }
  119. /**
  120. * 开启线程下载
  121. */
  122. private Runnable mdownApkRunnable = new Runnable() {
  123. @Override
  124. public void run() {
  125. try {
  126. URL url = new URL(apkUrl);
  127. HttpURLConnection conn = (HttpURLConnection) url
  128. .openConnection();
  129. conn.connect();
  130. int length = conn.getContentLength();
  131. InputStream is = conn.getInputStream();
  132. File file = new File(savePath);
  133. if (!file.exists()) {
  134. file.mkdir();
  135. }
  136. String apkFile = saveFileName;
  137. File ApkFile = new File(apkFile);
  138. FileOutputStream fos = new FileOutputStream(ApkFile);
  139. int count = 0;
  140. byte buf[] = new byte[1024];
  141. do {
  142. int numread = is.read(buf);
  143. count += numread;
  144. progress = (int) (((float) count / length) * 100);
  145. // 更新进度
  146. mHandler.sendEmptyMessage(DOWN_UPDATE);
  147. if (numread <= 0) {
  148. // 下载完成通知安装
  149. mHandler.sendEmptyMessage(DOWN_OVER);
  150. break;
  151. }
  152. fos.write(buf, 0, numread);
  153. } while (!interceptFlag);// 点击取消就停止下载.
  154. fos.close();
  155. is.close();
  156. } catch (MalformedURLException e) {
  157. e.printStackTrace();
  158. } catch (IOException e) {
  159. e.printStackTrace();
  160. }
  161. }
  162. };
  163. /**
  164. *
  165. * @Description: TODO 进行下载APK
  166. * @author Sunday
  167. * @date 2016年1月7日
  168. */
  169. private void downloadApk() {
  170. downLoadThread = new Thread(mdownApkRunnable);
  171. downLoadThread.start();
  172. }
  173. /**
  174. *
  175. * @Description: TODO 进行安装APK
  176. * @author Sunday
  177. * @date 2016年1月7日
  178. */
  179. private void installApk() {
  180. File apkfile = new File(saveFileName);
  181. if (!apkfile.exists()) {
  182. return;
  183. }
  184. Intent i = new Intent(Intent.ACTION_VIEW);
  185. i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  186. i.setDataAndType(Uri.parse("file://" + apkfile.toString()),
  187. "application/vnd.android.package-archive");
  188. mContext.startActivity(i);
  189. }
  190. }

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

  1. public class CheckUpdateManager implements ICallBackJson {
  2. private Context context;
  3. private WebHttpConnection webHttpConnection;
  4. private VersionEntity app;
  5. /* 判断是否是从首页调用该方法 */
  6. private int flag;
  7. public CheckUpdateManager(Context context, int flag) {
  8. this.context = context;
  9. webHttpConnection = new WebHttpConnection(this);
  10. this.flag = flag;
  11. }
  12. /**
  13. *
  14. * @Description: TODO 访问网络接口,获得服务器端App版本
  15. * @param
  16. * @return void
  17. * @throws
  18. * @author Sunday
  19. * @date 2016年1月6日
  20. */
  21. public void checkVersion() {
  22. webHttpConnection.getValue(ApiHttpAddress.UPDATA_VERSION, 1);
  23. }
  24. /**
  25. *
  26. * @Description: TODO 进行更新版本
  27. * @param @param app
  28. * @return void
  29. * @throws
  30. * @author Sunday
  31. * @date 2016年1月7日
  32. */
  33. protected void UpdateVersion(VersionEntity app) {
  34. if (null == app) {
  35. return;
  36. }
  37. PackageManager pm = context.getPackageManager();
  38. PackageInfo pinfo = null;
  39. try {
  40. pinfo = pm.getPackageInfo(context.getPackageName(),
  41. PackageManager.GET_CONFIGURATIONS);
  42. } catch (NameNotFoundException e) {
  43. e.printStackTrace();
  44. }
  45. int versionCode = pinfo.versionCode;
  46. Log.e("服务器版本", app.getVersion());
  47. Log.e("本机版本", String.valueOf(versionCode));
  48. if (Integer.parseInt(app.getVersion()) > versionCode) {
  49. UpdateManager mUpdateManager = new UpdateManager(context,
  50. app.getUrl(), "", "");
  51. mUpdateManager.checkUpdateInfo();
  52. } else {
  53. if (1 == flag) {
  54. Toast.makeText(context, "已经是最新版本", Toast.LENGTH_LONG).show();
  55. }
  56. }
  57. }
  58. /*
  59. * 网络请求失败回调
  60. */
  61. @Override
  62. public void requestJsonOnError(int msgFlag) {
  63. // TODO Auto-generated method stub
  64. ((BaseActivity) context).cancelProgressDialog();
  65. Log.e("msgFlag", String.valueOf(msgFlag));
  66. }
  67. /*
  68. * 网络请求成功回调
  69. */
  70. @Override
  71. public void requestJsonOnSucceed(String json, int msgFlag) {
  72. // TODO Auto-generated method stub
  73. ((BaseActivity) context).cancelProgressDialog();
  74. if (1 == msgFlag) {
  75. app = JSON.parseObject(json, VersionEntity.class);
  76. if (null != app)
  77. UpdateVersion(app);
  78. }
  79. }
  80. }

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

  1. void checkUpdate() {
  2. new Thread(new Runnable() {
  3. @Override
  4. public void run() {
  5. // TODO Auto-generated method stub
  6. CheckUpdateManager mCheckUpdateManager = new CheckUpdateManager(
  7. mContext, 0);
  8. mCheckUpdateManager.checkVersion();
  9. }
  10. }).start();
  11. }

点击打开链接

发表评论

表情:
评论列表 (有 0 条评论,331人围观)

还没有评论,来说两句吧...

相关阅读