Android应用的自动升级更新模块的实现Word格式文档下载.docx

上传人:b****2 文档编号:4511602 上传时间:2023-05-03 格式:DOCX 页数:12 大小:43.29KB
下载 相关 举报
Android应用的自动升级更新模块的实现Word格式文档下载.docx_第1页
第1页 / 共12页
Android应用的自动升级更新模块的实现Word格式文档下载.docx_第2页
第2页 / 共12页
Android应用的自动升级更新模块的实现Word格式文档下载.docx_第3页
第3页 / 共12页
Android应用的自动升级更新模块的实现Word格式文档下载.docx_第4页
第4页 / 共12页
Android应用的自动升级更新模块的实现Word格式文档下载.docx_第5页
第5页 / 共12页
Android应用的自动升级更新模块的实现Word格式文档下载.docx_第6页
第6页 / 共12页
Android应用的自动升级更新模块的实现Word格式文档下载.docx_第7页
第7页 / 共12页
Android应用的自动升级更新模块的实现Word格式文档下载.docx_第8页
第8页 / 共12页
Android应用的自动升级更新模块的实现Word格式文档下载.docx_第9页
第9页 / 共12页
Android应用的自动升级更新模块的实现Word格式文档下载.docx_第10页
第10页 / 共12页
Android应用的自动升级更新模块的实现Word格式文档下载.docx_第11页
第11页 / 共12页
Android应用的自动升级更新模块的实现Word格式文档下载.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Android应用的自动升级更新模块的实现Word格式文档下载.docx

《Android应用的自动升级更新模块的实现Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Android应用的自动升级更新模块的实现Word格式文档下载.docx(12页珍藏版)》请在冰点文库上搜索。

Android应用的自动升级更新模块的实现Word格式文档下载.docx

/application>

/manifest>

复制代码

其中,android:

versionCode和android:

versionName两个字段分别表示版本代码,版本名称。

versionCode是整型数字,versionName是字符串。

由于version是给用户看的,不太容易比较大小,升级检查时,可以以检查versionCode为主,方便比较出版本的前后大小。

那么,在应用中如何读取AndroidManifest.xml中的versionCode和versionName呢?

可以使用PackageManager的API,参考以下代码:

publicstaticintgetVerCode(Contextcontext){

intverCode=-1;

try{

verCode=context.getPackageManager().getPackageInfo(

"

0).versionCode;

}catch(NameNotFoundExceptione){

Log.e(TAG,e.getMessage());

}

returnverCode;

}

publicstaticStringgetVerName(Contextcontext){

StringverName="

;

verName=context.getPackageManager().getPackageInfo(

0).versionName;

returnverName;

复制代码或者在AndroidManifest中将android:

1.2.0"

写成android:

@string/app_versionName"

然后在values/strings.xml中添加对应字符串,这样实现之后,就可以使用如下代码获得版本名称:

publicstaticStringgetVerName(Contextcontext){

StringverName=context.getResources()

.getText(R.string.app_versionName).toString();

复制代码同理,apk的应用名称可以这样获得:

publicstaticStringgetAppName(Contextcontext){

.getText(R.string.app_name).toString();

复制代码2.流程框架

3.版本检查 

在服务端放置最新版本的apk文件,如:

http:

//localhost/myapp/myapp.apk

同时,在服务端放置对应此apk的版本信息调用接口或者文件,如:

//localhost/myapp/ver.json 

ver.json中的内容为:

[{"

appname"

:

jtapp12"

"

apkname"

jtapp-12-updateapksamples.apk"

verName"

1.0.1,"

verCode"

2}]

然后,在手机客户端上进行版本读取和检查:

privatebooleangetServerVer(){

Stringverjson=NetworkTool.getContent(Config.UPDATE_SERVER

+Config.UPDATE_VERJSON);

JSONArrayarray=newJSONArray(verjson);

if(array.length()>

0){

JSONObjectobj=array.getJSONObject(0);

try{

newVerCode=Integer.parseInt(obj.getString("

));

newVerName=obj.getString("

);

}catch(Exceptione){

newVerCode=-1;

newVerName="

returnfalse;

}catch(Exceptione){

returntrue;

复制代码比较服务器和客户端的版本,并进行更新操作。

if(getServerVerCode()){

intvercode=Config.getVerCode(this);

//用到前面第一节写的方法

if(newVerCode>

vercode){

doNewVersionUpdate();

//更新新版本

}else{

notNewVersionShow();

//提示当前为最新版本

复制代码详细方法:

privatevoidnotNewVersionShow(){

intverCode=Config.getVerCode(this);

StringverName=Config.getVerName(this);

StringBuffersb=newStringBuffer();

sb.append("

当前版本:

sb.append(verName);

Code:

sb.append(verCode);

/n已是最新版,无需更新!

Dialogdialog=newAlertDialog.Builder(Update.this).setTitle("

软件更新"

.setMessage(sb.toString())//设置内容

.setPositiveButton("

确定"

//设置确定按钮

newDialogInterface.OnClickListener(){

@Override

publicvoidonClick(DialogInterfacedialog,

intwhich){

finish();

}).create();

//创建

//显示对话框

dialog.show();

privatevoiddoNewVersionUpdate(){

发现新版本:

sb.append(newVerName);

sb.append(newVerCode);

是否更新?

Dialogdialog=newAlertDialog.Builder(Update.this)

.setTitle("

.setMessage(sb.toString())

//设置内容

更新"

pBar=newProgressDialog(Update.this);

pBar.setTitle("

正在下载"

pBar.setMessage("

请稍候..."

pBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);

downFile(Config.UPDATE_SERVER+Config.UPDATE_APKNAME);

})

.setNegativeButton("

暂不更新"

intwhichButton){

//点击"

取消"

按钮之后退出程序

复制代码4.下载模块

注,本部分参考了前人的相关实现,

voiddownFile(finalStringurl){

pBar.show();

newThread(){

publicvoidrun(){

HttpClientclient=newDefaultHttpClient();

HttpGetget=newHttpGet(url);

HttpResponseresponse;

response=client.execute(get);

HttpEntityentity=response.getEntity();

longlength=entity.getContentLength();

InputStreamis=entity.getContent();

FileOutputStreamfileOutputStream=null;

if(is!

=null){

Filefile=newFile(

Environment.getExternalStorageDirectory(),

Config.UPDATE_SAVENAME);

fileOutputStream=newFileOutputStream(file);

byte[]buf=newbyte[1024];

intch=-1;

intcount=0;

while((ch=is.read(buf))!

=-1){

fileOutputStream.write(buf,0,ch);

count+=ch;

if(length>

fileOutputStream.flush();

if(fileOutputStream!

fileOutputStream.close();

down();

}catch(ClientProtocolExceptione){

e.printStackTrace();

}catch(IOExceptione){

}.start();

下载完成,通过handler通知主ui线程将下载对话框取消。

voiddown(){

handler.post(newRunnable(){

pBar.cancel();

update();

});

复制代码5.安装应用 

voidupdate(){

Intentintent=newIntent(Intent.ACTION_VIEW);

intent.setDataAndType(Uri.fromFile(newFile(Environment

.getExternalStorageDirectory(),Config.UPDATE_SAVENAME)),

"

application/vnd.android.package-archive"

startActivity(intent);

复制代码果你将apk应用发布到market上,那么,你会发现market内建了类似的模块,可以自动更新或者提醒你是否更新应用。

那么,对于你自己的应用需要自动更新的话,自己内建一个是不是更加方便了呢?

本文提到的代码大多是在UpdateActivity.java中实现,为了能够使更新过程更加友好,可以在最初launcher的Activity中建立一个线程,用来检查服务端是否有更新。

有更

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高中教育 > 数学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2