Android版本更新
2016-07-28 14:09
302 查看
package test.bwie.com.checkedversion; import android.annotation.TargetApi; import android.app.Activity; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.support.v7.app.AlertDialog; import android.util.Log; import android.util.Xml; import android.widget.Toast; import com.lidroid.xutils.HttpUtils; import com.lidroid.xutils.exception.HttpException; import com.lidroid.xutils.http.ResponseInfo; import com.lidroid.xutils.http.callback.RequestCallBack; import com.lidroid.xutils.http.client.HttpRequest; import org.xmlpull.v1.XmlPullParser; import java.io.ByteArrayInputStream; import java.io.File; import java.io.InputStream; import java.util.ArrayList; import java.util.List; public class MainActivity extends Activity { private String newVersion_result = null; private AlertDialog alert; private AlertDialog alertDialog; private List<Info> info = new ArrayList<>(); private AlertDialogUtils alertUtils = new AlertDialogUtils(); private Handler myHandler = new Handler() { @Override public void handleMessage(Message msg) { newVersion_result = (String) msg.obj; try { info = parseXml(newVersion_result); int oldVersion = oldVersion(); if (oldVersion != 0 && info.get(0).getVersion_code() != 0) { if (oldVersion < info.get(0).getVersion_code()) { update(info.get(0).getDownloadUrl()); } if (oldVersion == info.get(0).getVersion_code()) { Toast.makeText(MainActivity.this, "当前已经是最高版本", Toast.LENGTH_LONG).show(); } } else { Toast.makeText(MainActivity.this, "获取版本信息失败!!!", Toast.LENGTH_LONG).show(); } } catch (Exception e) { e.printStackTrace(); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //查询最新版本 newVersion(); } /** * Pull解析XML文件 * * @param data * @return * @throws Exception */ public List<Info> parseXml(String data) throws Exception { List<Info> mList = null; Info beauty = null; // 由android.util.Xml创建一个XmlPullParser实例 XmlPullParser xpp = Xml.newPullParser(); InputStream inputStream = new ByteArrayInputStream(data.getBytes()); // 设置输入流 并指明编码方式 xpp.setInput(inputStream, "UTF-8"); // 产生第一个事件 int eventType = xpp.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { switch (eventType) { // 判断当前事件是否为文档开始事件 case XmlPullParser.START_DOCUMENT: mList = new ArrayList<Info>(); // 初始化books集合 break; // 判断当前事件是否为标签元素开始事件 case XmlPullParser.START_TAG: if (xpp.getName().equals("oschina")) { // 判断开始标签元素是否是book beauty = new Info(); } else if (xpp.getName().equals("versionCode")) { eventType = xpp.next();//让解析器指向name属性的值 // 得到name标签的属性值,并设置beauty的name beauty.setVersion_code(Integer.valueOf(xpp.getText())); } else if (xpp.getName().equals("versionName")) { eventType = xpp.next();//让解析器指向name属性的值 // 得到name标签的属性值,并设置beauty的name beauty.setVersionName(xpp.getText()); } else if (xpp.getName().equals("downloadUrl")) { // 判断开始标签元素是否是book eventType = xpp.next();//让解析器指向age属性的值 // 得到age标签的属性值,并设置beauty的age beauty.setDownloadUrl(xpp.getText()); } break; // 判断当前事件是否为标签元素结束事件 case XmlPullParser.END_TAG: if (xpp.getName().equals("oschina")) { // 判断结束标签元素是否是book mList.add(beauty); // 将book添加到books集合 beauty = null; } break; } // 进入下一个元素并触发相应事件 eventType = xpp.next(); } return mList; } //安装apk protected void installApk(File file) { Intent intent = new Intent(); //执行动作 intent.setAction(Intent.ACTION_VIEW); //执行的数据类型 intent.setDataAndType(Uri.fromFile(file), "application/vnd.Android.package-archive"); startActivity(intent); } /* * 进入程序的主界面 */ private void LoginMain() { Intent intent = new Intent(this, MainActivity.class); startActivity(intent); //结束掉当前的activity this.finish(); } /** * 提示是否更新的对话框 */ public void update(String apk_path) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("更新"); builder.setMessage("检测到有最新版本,是否更新?"); builder.setPositiveButton("更新", new AlertDialog.OnClickListener() { public void onClick(DialogInterface dialogInterface, int i) { updateVersion(info.get(0).getDownloadUrl(), Environment.getExternalStorageDirectory().getPath() + "/update.apk"); } }); builder.setNegativeButton("暂不更新", new AlertDialog.OnClickListener() { public void onClick(DialogInterface dialogInterface, int i) { alert.cancel(); } }); alert = builder.create(); alert.show(); } /** * 得到当前版本 * * @return */ public int oldVersion() { int version_code = 0; //得到版本码和版本名 try { version_code = this.getPackageManager().getPackageInfo("test.bwie.com.checkedversion", 0).versionCode; String versionName = this.getPackageManager().getPackageInfo("test.bwie.com.checkedversion", 0).versionName; Toast.makeText(MainActivity.this, "当前版本是:" + versionName, Toast.LENGTH_SHORT).show(); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return version_code; } /** * 获取新版本 */ public void newVersion() { HttpUtils hu = new HttpUtils(); hu.send(HttpRequest.HttpMethod.GET, "http://www.oschina.net/MobileAppVersion.xml", new RequestCallBack<String>() { @Override public void onSuccess(ResponseInfo<String> responseInfo) { String result = responseInfo.result; Log.d("tag", result); Message msg = new Message(); msg.obj = result; myHandler.sendMessage(msg); } @Override public void onFailure(HttpException e, String s) { Toast.makeText(MainActivity.this, "获取新版本信息失败!!!", Toast.LENGTH_LONG).show(); Log.d("tag", e.toString()); } }); } /** * 更新版本 * * @param url * @param path */ public void updateVersion(String url, String path) { HttpUtils hu = new HttpUtils(); hu.download(url, path, new RequestCallBack<File>() { @Override public void onLoading(long total, long current, boolean isUploading) { Toast.makeText(MainActivity.this, "正在更新,请稍后", Toast.LENGTH_LONG).show(); super.onLoading(total, current, isUploading); } @TargetApi(Build.VERSION_CODES.JELLY_BEAN) @Override public void onSuccess(ResponseInfo<File> responseInfo) { AlertDialog.Builder ab = new AlertDialog.Builder(MainActivity.this); ab.setMessage("更新包已下载完成,是否安装?"); ab.setPositiveButton("安装", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { update_apk(); alertDialog.cancel(); } }); ab.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { alertDialog.cancel(); Toast.makeText(MainActivity.this, "已取消安装", Toast.LENGTH_SHORT).show(); } }); alertDialog = ab.create(); alertDialog.show(); } @Override public void onFailure(HttpException e, String s) { Toast.makeText(MainActivity.this, "下载失败", Toast.LENGTH_SHORT).show(); } }); } /** * 安装apk */ public void update_apk() { File apkfile = new File( Environment.getExternalStorageDirectory() + "/update.apk"); Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(apkfile), "application/vnd.android.package-archive"); startActivity(intent); } } package test.bwie.com.checkedversion; /** * Created by HCM on 2016/7/27. */ public class Info { private int version_code;//版本号 private String versionName;//版本名称 private String downloadUrl;//下载apk的路径 public int getVersion_code() { return version_code; } public void setVersion_code(int version_code) { this.version_code = version_code; } public String getVersionName() { return versionName; } public void setVersionName(String versionName) { this.versionName = versionName; } public String getDownloadUrl() { return downloadUrl; } public void setDownloadUrl(String downloadUrl) { this.downloadUrl = downloadUrl; } @Override public String toString() { return "Info{" + "version_code=" + version_code + ", versionName='" + versionName + '\'' + ", downloadUrl='" + downloadUrl + '\'' + '}'; } }
相关文章推荐
- 由浅入深理解Android中的回调机制(二)【实现简易购物车功能】
- Android AlertDialog 无法弹出输入法
- android框架StringUtils工具类
- Android 应用内存泄露分析、改善经验总结
- bitmap图像工具
- Trie树的DAT实现
- 2015最流行的Android组件、工具、框架大全
- Android Studio 错误(持续更新中一)
- RemoteViews介绍
- Android框架概述
- Android提醒微技巧,你真的了解Dialog、Toast和Snackbar吗?
- Android_ProgressBar
- Android Service
- Android 众多的布局属性详解
- 深入理解Android中的Handler机制
- Android布局大全
- Android 半圆矩形的实现
- Android控件GridView的使用
- android 蛋糕图
- Android 热补丁技术的探索与简单实战----Qzone方案