2026年10月31日 · 今日 0 帖 · 会员 6.1万 · 主题 17.4万
登录 · 注册 · 游客,欢迎随便逛逛
返回版块
1000
Lv9有为九子能等级图标
勋章勋章勋章勋章勋章
帖子
9.3万
回复
2,089
积分
60.3万
注册
2006-12-06
[怀旧国机]

[教程]Android实现程序的自动(马上续贴)

[复制链接]
查看 413 回复 12
楼主 发表于 | 只看该作者
2 人收藏

一个良好的android程序都应该有版本的更新,那怎样实现更新呢?今天就为大家介绍应用自动更新的全过程。程序自动更新的流程大致如下:程序启动 -> 适时后台检查更新 -> 链接远程服务器 -> 获取新版本信息-> 比对当前版本 -> if(有更新) -> 显示更新提示对话框并显示更新的内容 -> 交与用户选择下面是我做的一个简单demo,大家可以参考一下:布局比较简单就不上代码了。主程序代码:

package com.cloay.*;import java.io.ioexception;import java.net.httpurlconnection;import java.net.malformedurlexception;import java.net.url;import android.app.activity;import android.app.alertdialog;import android.content.dialoginterface;

package com.cloay.*;import java.io.ioexception;import java.net.httpurlconnection;import java.net.malformedurlexception;import java.net.url;import android.app.activity;import android.app.alertdialog;import android.content.dialoginterface;

package com.cloay.*;import java.io.ioexception;import java.net.httpurlconnection;import java.net.malformedurlexception;import java.net.url;import android.app.activity;import android.app.alertdialog;import android.content.dialoginterface;

import android.content.pm.packagemanager.namenotfoundexception;import android.os.bundle;import android.view.import android.view.view.onclicklistener;import android.widget.button;import android.widget.toast;

/*** 程序自动更新 *testactivity.java** @author cloay 2011-11-23*/public class *testactivity extends activity {private button button;@overridepublic void on*(bundle savedinstancestate) {super.on*(savedinstancestate);setcontentview(r.layout.main);button = (button

k);button.setonclicklistener(new onclicklistener() {@overridepublic void onclick(view v) {checkversion();} catch (namenotfoundexception e) {// todo auto-generated catch blocke.printstacktrace();}}});}/*** 检查是否需要更新程序*

* @throws namenotfoundexception*/private void checkversion() throws namenotfoundexception {** ** = new **();url url;try {url = new url(“http://localhost:8080/*.xml“);httpurlconnection connection = (httpurlconnection) url.openconnection();// conne

n.getinputstream());} catch (malformedurlexception e) {e.printstacktrace();} catch (ioexception e) {e.printstacktrace();}if (**.getversion().equals(versionutil.getversionname(this))) {toast.maketext(this, “版本相同,不需要升级!“, toast.length_

short).show();} else {show*dialog(**);}}private void show*dialog(** **) {alertdialog alertdialog = new alertdialog.builder(this).settitle(“提示检测到新版本,确定升级吗?“).seticon(r.drawable.ask).setmessage(**.getdescription()).setpositivebutton(“确定“,

new dialoginterface.onclicklistener() {@overridepublic void onclick(dialoginterface dialog, int which) {dialog.cancel();}}).setnegativebutton(“取消“, new dialoginterface.onclicklistener() {

@overridepublic void onclick(dialoginterface dialog, int which) {dialog.cancel()br]}}).*();alertdialog.show();}}这里说明一下:远程服务器放置一个xml文件,用来说明当前新版本的信息。包括版本号,新版本功能说明,新版下载链接。xml解析工具代码:package com.cloay.*;import java.io.ioexc

eption;import java.io.inputstream;import javax.xml.parsers.documentbuilder;import javax.xml.parsers.documentbuilderfactory;import javax.xml.parsers.parserconfigurationexception;import org.w3c.dom.document;

import org.w3c.dom.element;import org.w3c.dom.nodelist;import org.xml.sax.saxexception;/*** 解析xml文件 parsexmlutils.java** @author cloay 2011-11-7*/public class parsexm

lutils {/*** 通过inputstream 解析文件** @param in* @return*/public static ** parsexml(inputstream in) {** ** = new **();documentbuilderfactory dbf = documentbuilderfactory.newinstance();documentbuilder db = null;try {db = dbf.newdocumentbuilder();

document doc = null;doc = db.parse(in);element root = doc.getdocumentelement();nodelist resultnode = root.getelementsbytagname(“*“);for (int i = 0; i < resultnode.getlength(); i++) {element res = (element) resultnode.item(i);**.setversion(res

.getelementsbytagname(“version“).item(0).getfirstchild().getnod*ue());**.seturl(res.getelementsbytagname(“url“).item(0)

.getfirstchild().getnod*ue());}} catch (parserconfigurationexception e) {e.printstacktrace();

} catch (saxexception e) {e.printstacktrace();} catch (ioexception e) {e.printstacktrace();}return **;}}**实体:package com.cloay.*;/*** 更新信息实体类 **.java** @author cloay 2011-11-23*/public class ** {private string version; // 版本号

// 新版本存放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 descri

ption) {this.description = description;}}获取当前已安装版本信息:package com.cloay.*;import android.content.context;import android.content.pm.package*;import android.content.pm.packagemanager;

import android.content.pm.packagemanager.namenotfoundexception;/*** 版本工具类 versionutil.java** @author cloay 2011-11-23*/public class versionutil {/**

* 获取版本号** @param context* 上下文* @return* @throws namenotfoundexception*/public static string getversionname(context context)throws namenotfoundexception {// 获取packagemanager 实例packagemanager packagemanager = context.getpackagemanager();// 获得context所属类

的包名,0表示获取版本信息package* package* = packagemanager.getpackage*(context.getpackagename(), 0);return package*.versionname;}}整个过程并不麻烦,许多地方已经详细注释了,就写那么多。第 1/3 页,共 3 页

登录回复
13143
Lv4莫问四书意等级图标等级图标等级图标
帖子
16
回复
921
积分
1,577
注册
2011-02-11
1 楼

000000000000000000000000000

3560
Lv2独赏二月雪等级图标等级图标
帖子
11
回复
338
积分
837
注册
2010-12-11
2 楼

→_→下咯的

106008
Lv6胸怀六国志等级图标等级图标等级图标
勋章勋章勋章勋章勋章勋章勋章
帖子
27
回复
6,810
积分
40.7万
注册
2012-05-02
3 楼

咳咳

31711
Lv3畅意三江水等级图标等级图标
帖子
0
回复
904
积分
6,412
注册
2011-04-19
5 楼

KTVK金考虑

5713
Lv3畅意三江水等级图标
帖子
0
回复
641
积分
5,124
注册
2011-01-05
6 楼

....

1926
Lv6胸怀六国志等级图标等级图标等级图标
勋章
帖子
2
回复
1,763
积分
18.2万
注册
2010-11-03
8 楼

透漏木事

68638
Lv2独赏二月雪等级图标
帖子
3
回复
320
积分
2,627
注册
2011-08-13
9 楼

你好,不错

98474
Lv3畅意三江水等级图标
帖子
0
回复
466
积分
3,286
注册
2012-03-09
10 楼

看看

89137
Lv3畅意三江水等级图标等级图标
帖子
15
回复
536
积分
8,746
注册
2011-12-27
11 楼

阿阿阿

登录后可以回复这个帖子。旧账号可使用原密码登录。

登录 注册新号
← 返回版块