Android版本更新
来源:互联网 发布:公司网络管理软件 编辑:程序博客网 时间:2024/05/20 12:51
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 + '\'' + '}'; }}
0 0
- Android版本更新
- Android SDK版本更新
- Android软件版本更新
- Android 检测版本更新
- Android之版本更新
- Android版本更新实现
- android版本更新问题
- android apk版本更新
- android版本更新
- Android 版本的更新
- Android版本更新
- Android提示版本更新
- android 版本更新
- Android应用版本更新
- android版本更新
- Android检测版本更新
- Android中版本更新
- Android 更新升级版本
- RB-tree与Hashtable的区别与选择
- 打击破解软件,终于有解决良方了!
- UIWindow&UIWindowLevel
- JAVA代码
- HTTP,TCP/IP相关
- Android版本更新
- 苏宁大造818发烧节,玩得是哪招?
- Comparable和Comparator的区别
- iOS开发时的注意事项
- 相似度算法之SVD
- ORA-12154: TNS: 无法解析指定的连接标识符
- VxVMI(虚拟内存)
- LLDB调试
- CTO五种基本的必备素质