安卓软件版本更新

public class MainActivity extends Activity {
private static final String DOWNLOAD_ADDRESS = "http://10.0.2.2:8080/test1118/weishi360.apk";
private static final String CHECK_ADDRESS = "http://10.0.2.2:8080/test1118/version.xml";
private static final String PACKAGE_NAME = "com.ruicaiedu.day_1224_updatesoftware";

private AlertDialog dialog;
private ProgressBar pb;
private ProgressBar pb_download;
private Apk apk;

private String oldVersion;
private String newVersion;

private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:// 有新版本
apk = (Apk) msg.obj;
newVersion = apk.getVersionName();
oldVersion = getVersionName();
if (!newVersion.equals(oldVersion)) {
showDialog();
}
break;

default:
break;
}
}
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

initWidgets();
parseXmlWithPull(CHECK_ADDRESS);
}

private void initWidgets() {
pb = (ProgressBar) findViewById(R.id.pb);
pb_download=(ProgressBar) findViewById(R.id.pb_download);
}

public String getVersionName() {
String versionName = "";
PackageManager pm = getPackageManager();
try {
PackageInfo packageInfo = pm.getPackageInfo(PACKAGE_NAME,
PackageManager.GET_INSTRUMENTATION);
versionName = packageInfo.versionName;
} catch (NameNotFoundException e) {
e.printStackTrace();
}
return versionName;
}

public void showDialog() {

dialog = new AlertDialog.Builder(this).setTitle("软件更新提示")
.setMessage("有新版本,现在要更新吗?")
.setPositiveButton("马上更新", new OnClickListener() {

@Override
public void onClick(DialogInterface arg0, int arg1) {
pb.setVisibility(View.GONE);
pb_download.setVisibility(View.VISIBLE);
new DownLoadAsyncTask().execute(DOWNLOAD_ADDRESS);// 让异步任务来下载
}
}).setNegativeButton("残忍拒绝", new OnClickListener() {

@Override
public void onClick(DialogInterface arg0, int arg1) {

}
}).create();
dialog.show();
}

// 解析xml
public void parseXmlWithPull(String address) {
HttpUtil.sendRequest(address, new HttpCallBackListener() {

@Override
public void onFinish(InputStream is) {
try {
XmlPullParserFactory parserFactory = XmlPullParserFactory
.newInstance();
XmlPullParser pullParser = parserFactory.newPullParser();
pullParser.setInput(is, "utf-8");
int eventType = pullParser.getEventType();
apk = new Apk();

while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_TAG) {
String tagName = pullParser.getName();
if (tagName.equals("name")) {
apk.setName(pullParser.nextText());
} else if (tagName.equals("url")) {
apk.setAddress(pullParser.nextText());
} else if (tagName.equals("version")) {
apk.setVersionName(pullParser.nextText());
}
}
eventType = pullParser.next();
}
Message msg = Message.obtain();
msg.what = 1;
msg.obj = apk;
handler.sendMessage(msg);
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}

@Override
public void onError(Exception e) {

}
});
}

// 自定义一个异步任务来下载
class DownLoadAsyncTask extends AsyncTask<String, Integer, String> {
int currentSize = 0;
int totalSize = 0;
File file = null;

// 耗时操作
@Override
protected String doInBackground(String... params) {
try {
URL url = new URL(params[0]);
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
connection = (HttpURLConnection) url.openConnection();

connection.setReadTimeout(5000);
connection.setConnectTimeout(5000);
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setUseCaches(false);
InputStream is = connection.getInputStream();

totalSize = connection.getContentLength();
file = new File(Environment.getExternalStorageDirectory(),
"/360weishi.apk");
DataOutputStream os = new DataOutputStream(
new FileOutputStream(file));
int len = 0;
byte[] buffer = new byte[4096];
while ((len = is.read(buffer)) != -1) {
os.write(buffer, 0, len);
publishProgress(len);
}
// 其中file就是下载的文件对象
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");// 设置意图的动作
intent.addCategory("android.intent.category.DEFAULT");// 为意图添加额外的数据
intent.setDataAndType(Uri.fromFile(file),
"application/vnd.android.package-archive");// 设置意图的数据与类型
startActivity(intent);// 激活该意图

} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return "下载完成";
}

// 界面更新
@Override
protected void onProgressUpdate(Integer... values) {
currentSize += values[0];
pb.setProgress((int) ((double) currentSize / totalSize * pb
.getMax()));
super.onProgressUpdate(values);
}

// 任务完成
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
Toast.makeText(getApplicationContext(), result, Toast.LENGTH_SHORT)
.show();
pb.setVisibility(View.GONE);
}

}

}

时间: 2024-08-04 08:03:24

安卓软件版本更新的相关文章

程序设计C语言二级考试教程 Java基础视频教程 安卓软件开发教程 Unity3D游戏制作入门教程

热门推荐电脑办公计算机基础知识教程 Excel2010基础教程 Word2010基础教程 PPT2010基础教程 五笔打字视频教程 Excel函数应用教程 Excel VBA基础教程 WPS2013表格教程 更多>平面设计PhotoshopCS5教程 CorelDRAW X5视频教程 Photoshop商业修图教程 Illustrator CS6视频教程 更多>室内设计3Dsmax2012教程 效果图实例提高教程 室内设计实战教程 欧式效果图制作实例教程 AutoCAD2014室内设计 Aut

浅谈安卓软件如何实现企业盈利

谷歌系统的开源性不仅提供了一个免费的平台,而且也让很多第三方Android应用程序商店加入其中.这其中还包括了亚马逊Android商店.与此同时,各大Android手机厂商以及运营商也纷纷开设了自己的安卓应用商店.这种情况在iOS,Symbian,乃至Windows Phone 7中是不存在的.在你争我夺的价格战背后,一系列新的疑问也随之而来.Android第三方应用商店真的能盈利吗?通过何种方式盈利?用户最关注的安全性又如何保障?借助谷歌庞大的广告网络,Android第三方应用最终会如何发展?

Genymotion - 强大好用高性能的 Android 模拟器 (在电脑流畅运行APK安卓软件游戏的利器)

随着 Android 系统的应用和游戏越来越丰富,甚至有些比起Windows.Mac上的软件更加好用好玩,因此很多人都希望能在电脑上也能玩到安卓的游戏或APP. 我们曾推荐过 BlueStacks,而 Genymotion 则是另一款更加优秀专业高性能的安卓 Android 模拟器!它支持 Windows.Mac.Linux,由于其模拟运行速度很快画面流畅.且支持 OpenGL 3D 加速.多开.全屏等特性,并提供 Eclipse.IntelliJ IDEA 的开发插件,不仅是开发者们也是普通玩

更新 是 可用的 针对 安卓 软件开发包和工具 Updates are available for android software development packages and tools

作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:[email protected] E-mail: 313134555 @qq.com 更新 是 可用的 针对 安卓 软件开发包和工具 Updates are available for android software development packages and tools 安卓软件开发包更新 确保 你有最新的特性和 增强. 安卓工作室将更新下面的组件: 安卓模拟器 新版本 26.1.2 谷歌仓库新版本 57 安卓7.

安卓 软件更新程序

首先,在manifest.xml配置文件中,会有当前安卓软件的版本号. 1 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 2 package="com.cn.gordon.exhibition.walk.activity" 3 android:versionCode="1" 4 android:versionName="1.0.1"

移动开发:给安卓软件开发初学者简单的教程

如果你想学习安卓软件开发,还是个初学者,可以在网上找到很多的安卓教程和学习材料,眼花缭乱的初学者教程和进阶教程,如果您看到这篇文章就不要错过,简直是初学者的福音. 考虑到有如此多的信息你又是初学者,所以你很容易感到迷惑不知道从哪开始.为了让你感到轻松同时消除有很多很好的教程要学习的假象,可以从下面这12篇教程开始着手. 初学者不用关注所有的教程,也不用关注某一教程里的全部内容.因为其中的一些教程是为初学者设计,但渐渐会深入一些高级话题.所以,如果你无法理解每篇教程的全部内容,别灰心. 如果哪里遇

用什么安卓软件可以在手机中打开CAD图纸并进行查看?

用什么安卓软件可以在手机中打开CAD图纸并进行查看?现在随着科技的不断发展,CAD看图不仅仅能在电脑中进行下载使用,还可以在手机中,而且还支持多种版本的,有安卓版和苹果版的,今天小编就来和大家分享一下的是用什么安卓软件可以在手机中打开CAD图纸并进行查看呢,希望能够帮助到你们,有兴趣的朋友也一起来看看吧! 第一步:首先打开您手机上面的软件应用商店,搜索迅捷CAD看图,然后点击进行下载安装,如果您手机应用商店上面搜索不到这款看图软件的话,您还可以去到百度应用助手上面进行搜索安装也是可以的. 第二步

安卓软件开发你知道需要学什么吗,看这里?

当下手机软甲开发越来越流行,开发主题也逐渐从公司到个人过渡.相对于经验薄弱的个人来说安卓软件开发需要学什么?具备怎样的基础呢? 1.Activity生命周期 Android中有四大组件,但Activity是最常用的,练掌握Android的生命周期是必须的.其实生命周期就是记住 Activity的那些方法在什么时候被系统调用,这样才可以把对应的逻辑代码写到合适的方法内部去. 2.界面开发技术 界面开发是一种基本的技术,几乎所有的程序里面都需要用到.在Android开发中界面开发分为3种: 1)使用

一个有趣的安卓软件异常统计

统计背景: 为提高编码质量,把软件开发过程中出现的bug提交上个人网站,年度终结,给它做个统计. 统计项目:1个上线项目,3个开发中项目,1个私人项目 项目开发人员:作者本人.同行5人 项目主题:电商.系统应用 信息收集日期:2014-08-13 20:37:54(捕获第一个异常)到2015-01-10 00:19:36(统计时最后一个异常提交时间) 异常信息数量:3192个 数据库收集到的异常信息: 异常信息统计sql: SELECT (SELECT count(Id) From t_appe