版本跟新
来源:互联网 发布:java tooltip 隐藏 编辑:程序博客网 时间:2024/04/27 16:31
Manacitity
package com.bawei.lianjie;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
public class MainActivity extends Activity {
private AlertDialog dialog;private UpdateEntity updateEntity;private TextView tv_name;/** * 消息机制 */private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); switch (msg.what) { case 0: dialog.setMessage(updateEntity.getDescription()); dialog.show(); break; case 1: downLoadApk(); break; } }};@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dialog = new AlertDialog.Builder(MainActivity.this). setTitle("升级提醒"). setIcon(R.drawable.seller_icon). setPositiveButton("在线升级", onclick). setNegativeButton("不想升级", null). create(); //开启线程 new Thread(new CheckVersionTask()).start();}DialogInterface.OnClickListener onclick = new DialogInterface.OnClickListener(){ @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub handler.sendEmptyMessage(1); }};/* * 从服务器中下载APK */protected void downLoadApk() { final ProgressDialog pd; //进度条对话框 pd = new ProgressDialog(this); pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); pd.setMessage("正在下载更新"); pd.show(); new Thread(){ @Override public void run() { try { File file = getFileFromServer(updateEntity.getUrl(), pd); sleep(3000); UpdateTools tools = new UpdateTools(); //安装APk tools.installApk(file,MainActivity.this); pd.dismiss(); //结束掉进度条对话框 } catch (Exception e) { e.printStackTrace(); } }}.start();}/* * 从服务器获取xml解析并进行比对版本号 */public class CheckVersionTask implements Runnable{ public void run() { try { //从资源文件获取服务器 地址 String path = getResources().getString(R.string.serverurl); //包装成url的对象 URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5000); InputStream is =conn.getInputStream(); updateEntity = UpdateTools.getUpdataInfo(is); int versionCode = MainActivity.this.getPackageManager().getPackageInfo(MainActivity.this.getPackageName(), 0).versionCode; if(Integer.parseInt(updateEntity.getVersion()) <= versionCode){ Log.i("xxx","版本号相同无需升级"); }else{ Log.i("xxxx","版本号不同 ,提示用户升级 "); handler.sendEmptyMessage(0); } } catch (Exception e) { e.printStackTrace(); } }}/** * 下载方法 * * @param path * @param pd * @return * @throws Exception */public File getFileFromServer(String path, ProgressDialog pd) throws Exception { // 如果相等的话表示当前的sdcard挂载在手机上并且是可用的 if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5000); // 获取到文件的大小 pd.setMax(conn.getContentLength()); InputStream is = conn.getInputStream(); File file = new File(Environment.getExternalStorageDirectory(), "updata.apk"); FileOutputStream fos = new FileOutputStream(file); BufferedInputStream bis = new BufferedInputStream(is); byte[] buffer = new byte[1024]; int len; int total = 0; while ((len = bis.read(buffer)) != -1) { fos.write(buffer, 0, len); total += len; // 获取当前下载量 pd.setProgress(total); } fos.close(); bis.close(); is.close(); return file; } else { return null; }}@Overrideprotected void onPause() { // TODO Auto-generated method stub super.onPause();}@Overrideprotected void onResume() { // TODO Auto-generated method stub super.onResume();}
}
////////////////////////////
UpdateEntity
package com.bawei.lianjie;
/**
* 版本更新信息的封装
*
* @author dagang
*
*/
public class UpdateEntity {
private String version;
private String url;private String description;public String getVersion() { return version;}public void setVersion(String version) { this.version = version;}public String getUrl() { return url;}public void setUrl(String url) { this.url = url;}public String getDescription() { return description;}public void setDescription(String description) { this.description = description;}
}
/////////////
UpdateTools
package com.bawei.lianjie;
import java.io.File;
import java.io.InputStream;
import org.xmlpull.v1.XmlPullParser;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.util.Xml;
/**
*
* 获取服务器的更新内容
*
* 当前版本
*
* apk的路径
*
* 更新细则
*
* @author dagang
*
*/
public class UpdateTools {
/*
* 用pull解析器解析服务器返回的xml文件 (xml封装了版本号)
*/
public static UpdateEntity getUpdataInfo(InputStream is) throws Exception {
XmlPullParser parser = Xml.newPullParser();
parser.setInput(is, “utf-8”);// 设置解析的数据源
int type = parser.getEventType();
UpdateEntity info = new UpdateEntity();// 实体
while (type != XmlPullParser.END_DOCUMENT) {
switch (type) {
case XmlPullParser.START_TAG:
if (“version”.equals(parser.getName())) {
info.setVersion(parser.nextText()); // 获取版本号
} else if (“url”.equals(parser.getName())) {
info.setUrl(parser.nextText()); // 获取要升级的APK文件
} else if (“description”.equals(parser.getName())) {
info.setDescription(parser.nextText()); // 获取该文件的信息
}
break;
}
type = parser.next();
}
return info;
}
/** * * 安装Apk * * @param file * @param context */public void installApk(File file,Context context) { Intent intent = new Intent(); //执行动作 intent.setAction(Intent.ACTION_VIEW); //执行的数据类型 intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive"); context.startActivity(intent);}
}
////////////
string
http://169.254.239.220:8080/goods_file/update_file.xml
- appcan 版本跟新
- ios版本跟新
- 版本跟新
- 版本跟新 导入类名 Conf
- 苹果版本跟新的提示
- atitit.js 各版本 and 新特性跟浏览器支持报告
- 为什么需要MiniDao? 新持久层 3.5.1 版本发布,让hibernate跟mybatis一样灵活
- [iOS AppStore] 根据AppStore中的App版本 做跟新提示
- sql数据跟新
- runOnUiThread() UI跟新
- git 安装跟版本
- php实现跟页面数据跟新
- git跟新gitbub的代码(首次跟新步骤)
- ubuntu安装跟新失败
- sql根据条件跟新
- Android Studio 在线跟新
- textview 如何跟新值?
- ubuntu16.04跟新cmake
- 【30.01%】【hdu 3397】Sequence operation
- 版本更新UpdateTools
- Eclipse中将Java项目转换成Web项目的方法
- 使用Tomcat访问web服务器
- 文章标题UpdateEntity
- 版本跟新
- 文章标题Conf
- 文章标题Main
- Android 多线程-----AsyncTask详解
- 图解 Android 事件分发机制
- 文章标题
- Git常用命令
- UIButton高光状态(highlighted)左上角有个蓝色小方块
- 版本升级