UpdateUtil.java 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. package com.edufound.mobile.util;
  2. import android.app.Activity;
  3. import android.app.Dialog;
  4. import android.content.Context;
  5. import android.content.DialogInterface;
  6. import android.os.Handler;
  7. import android.os.Looper;
  8. import android.os.Message;
  9. import android.view.Display;
  10. import android.view.Gravity;
  11. import android.view.KeyEvent;
  12. import android.view.LayoutInflater;
  13. import android.view.Window;
  14. import android.view.WindowManager;
  15. import android.widget.FrameLayout;
  16. import android.widget.ProgressBar;
  17. import android.widget.TextView;
  18. import android.widget.Toast;
  19. import com.edufound.mobile.R;
  20. import java.io.File;
  21. import java.io.FileOutputStream;
  22. import java.io.IOException;
  23. import java.io.InputStream;
  24. import java.net.URL;
  25. import java.net.URLConnection;
  26. public class UpdateUtil {
  27. String mNewAppFile;
  28. int downLoadFileSize;
  29. Activity mContext;
  30. File mApkDir;
  31. int fileSize;
  32. ProgressBar pBar;
  33. TextView tText;
  34. public UpdateUtil(Activity context) {
  35. mContext = context;
  36. mApkDir = context.getDir("apk", Context.MODE_PRIVATE);
  37. showWindow();
  38. }
  39. //显示对话框
  40. private void showWindow() {
  41. mDownHandler.sendEmptyMessage(0x2283);
  42. }
  43. // 下載文件
  44. public void down_file(String url) throws IOException {
  45. String filename = url.substring(url.lastIndexOf("/") + 1);
  46. URL myURL = new URL(url);
  47. URLConnection conn = myURL.openConnection();
  48. conn.connect();
  49. InputStream is = conn.getInputStream();
  50. fileSize = conn.getContentLength();
  51. if (fileSize <= 0)
  52. throw new RuntimeException("filesize is 0");
  53. if (is == null)
  54. throw new RuntimeException("stream is null");
  55. mNewAppFile = mApkDir.toString() + "/" + filename;
  56. FileOutputStream fos = new FileOutputStream(mNewAppFile);
  57. byte buf[] = new byte[1024];
  58. downLoadFileSize = 0;
  59. sendMsg(0);
  60. do {
  61. int numread = is.read(buf);
  62. if (numread == -1) {
  63. break;
  64. }
  65. fos.write(buf, 0, numread);
  66. downLoadFileSize += numread;
  67. sendMsg(1);//
  68. } while (true);
  69. sendMsg(2);//
  70. try {
  71. is.close();
  72. } catch (Exception ex) {
  73. Logger.DebugE("下载文件异常--" + ex.getMessage());
  74. }
  75. }
  76. private void sendMsg(int flag) {
  77. Message msg = new Message();
  78. msg.what = flag;
  79. mDownHandler.sendMessage(msg);
  80. }
  81. Dialog dialog;
  82. // 更新下载
  83. private Handler mDownHandler = new Handler(Looper.getMainLooper()) {
  84. @Override
  85. public void handleMessage(Message msg) {
  86. if (!Thread.currentThread().isInterrupted()) {
  87. switch (msg.what) {
  88. case 0x2283:
  89. FrameLayout frameLayout = (FrameLayout) LayoutInflater.from(mContext).inflate(R.layout.window_upgrade, null);
  90. pBar = (ProgressBar) frameLayout.findViewById(R.id.upgrade_progress);
  91. tText = (TextView) frameLayout.findViewById(R.id.upgrade_text);
  92. dialog = new Dialog(mContext);
  93. dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
  94. @Override
  95. public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
  96. if (keyCode == KeyEvent.KEYCODE_BACK || keyCode == KeyEvent.KEYCODE_ESCAPE) {
  97. return true;
  98. }
  99. return false;
  100. }
  101. });
  102. dialog.setContentView(frameLayout);
  103. Window dialogWindow = dialog.getWindow();
  104. dialogWindow.setGravity(Gravity.CENTER);
  105. WindowManager m = mContext.getWindowManager();
  106. Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用
  107. WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 获取对话框当前的参数值
  108. p.height = (int) (d.getHeight() * 0.6);
  109. p.width = (int) (d.getWidth() * 0.8);
  110. dialogWindow.setAttributes(p);
  111. dialog.setTitle("升级中");
  112. dialog.setCanceledOnTouchOutside(false);
  113. dialog.show();
  114. break;
  115. case 0:
  116. pBar.setMax(fileSize);
  117. case 1:
  118. pBar.setProgress(downLoadFileSize);
  119. int result = downLoadFileSize * 100 / fileSize;
  120. tText.setText((downLoadFileSize / 1024 / 1024) + "MB/" + (fileSize / 1024 / 1024) + "MB");
  121. if (result == 100) {
  122. }
  123. break;
  124. case 2:
  125. dialog.dismiss();
  126. EduFoundUtil.openFile(mContext, new File(mNewAppFile));
  127. break;
  128. case -1:
  129. String error = msg.getData().getString("error");
  130. Toast.makeText(mContext, error, Toast.LENGTH_SHORT).show();
  131. break;
  132. }
  133. }
  134. super.handleMessage(msg);
  135. }
  136. };
  137. }