




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Android程序的版本检测与更新 做个网站的安卓客户端,用户安装到自己手机上,如果我出了新版本怎么办呢?要有版本更新功能。本来版本检测最好可以自动进行。但如果每次开启程序,都要先检测一轮,是一种浪费,毕竟版本更新是小概率的事情。或许可以程序开启的时候,判断一下时间,单日就检测,双日就不检测,或者随机什么的,降低一下检测的频率?我采取的做法是将检测功能做到了菜单上,用户有需要,就手动打开自己检测一下。反正我们这个是网站客户端,有版本更新,在网站上发个通告就行了。版本检测与更新有以下几个关键步骤:1、检测有无新版本2、下载新版本3、安装替换新版本我处理的方案是1、在assets文件夹新增一个文件
2、:ver.cfg,记录版本信息,纯文本格式,内容只有一句话:Version=1.0这个会随安装包装到用户的手机上然后在网站里面,设置一XML文件ver_apk.xml,内容也只有这么一点:<?xml version="1.0" encoding="utf-8" ?><string>1.0</string>检测的时候,就先访问网站的这个XML,得到最新版本号,然后与手机上的ver.cfg文件里记录的进行比对,不同的话就可以认为存在新版本,提示进行更新。2、下载的话就是直接下载的,我还不知道怎么弄断点续传3、安装替换,关键
3、在于签名。就是每个版本的签名要保持一致。否则新的无法替换旧的,提示安装未完成。- 天气太冷,咯咯咯 -这个功能做在菜单上,触发代码如下:/=/ 菜单/= Overridepublic boolean onCreateOptionsMenu(Menu menu) menu.add(Menu.NONE, Menu.FIRST + 1, 5, "检测更新").setIcon( return true;Overridepublic boolean onOptionsItemSelected(MenuItem item) switch (item.getItemId() case M
4、enu.FIRST + 1: Toast.makeText(this, "正在检测版本", Toast.LENGTH_LONG).show(); UpdateVer uv = new UpdateVer(urlApk,urlVer,MainActivity.this); uv.checkVer(); break; case Menu.FIRST + 2: confirmExit(); break; return false;检测更新因为代码比较多,写成一个类进行封装UpdateVer.javapackage android.*;public class UpdateVer
5、extends Activity private static final String TAG = "DOWNLOADAPK" private String PastVersion; private String NowVersion; public ProgressDialog pBar; private String currentFilePath = "" private String fileEx="" private String fileNa="" private String strURL=&quo
6、t;" private String VersionUri ="" private Context mContext; private final String fileVer = "ver.cfg" public UpdateVer(String urlapk,String urlver,final Context context) SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); String ver = "?ver=" + d
7、f.format(new Date();/主要是避开手机的缓存 strURL = urlapk + ver; VersionUri = urlver + ver; mContext = context; public void checkVer() / 解析Version网页,获取版本号 getVersionxml(VersionUri); private void compareVer() load(); /当有最新版本的时候 if(PastVersion != null && !PastVersion.equals(NowVersion) Dialog dialog = n
8、ew AlertDialog.Builder(mContext).setTitle("系统更新") .setMessage(String.format("发现新版本%s,目前版本为%s,请更新!",NowVersion,PastVersion)/ 设置内容 / 设置确定按钮 .setPositiveButton("确定" ,new DialogInterface.OnClickListener() Override public void onClick(DialogInterface dialog, int which) pBar
9、= new ProgressDialog(mContext); pBar.setTitle("正在下载"); pBar.setMessage("请稍候."); pBar.setProgressStyle(ProgressDialog.STYLE_SPINNER); fileEx = strURL.substring(strURL.lastIndexOf(".") + 1,strURL.length().toLowerCase(); fileEx = fileEx.substring(0,fileEx.lastIndexOf("
10、;?"); fileNa = strURL.substring(strURL.lastIndexOf("/") + 1,strURL.lastIndexOf("."); getFile(strURL); ).setNegativeButton("取消", new DialogInterface.OnClickListener() Override public void onClick(DialogInterface dialog, int whichButton) / 点击"取消"按钮之后退出程序 ).
11、create();/ 创建 / 显示对话框 dialog.show(); else Toast.makeText(mContext, String.format("当前为最新版本%s",PastVersion), Toast.LENGTH_LONG).show(); private void getFile(final String strPath) pBar.show(); try if (strPath.equals(currentFilePath) ) getDataSource(strPath); currentFilePath = strPath; Runnabl
12、e r = new Runnable() Override public void run() try getDataSource(strPath); catch (Exception e) Log.e(TAG, e.getMessage(), e); ; new Thread(r).start(); catch(Exception e) e.printStackTrace(); /*取得远程文件*/ private void getDataSource(String strPath) throws Exception if (!URLUtil.isNetworkUrl(strPath) Lo
13、g.d("Tag","error"); else /*取得URL*/ URL myURL = new URL(strPath); /*建立联机*/ URLConnection conn = myURL.openConnection(); conn.connect(); /*InputStream 下载文件*/ InputStream is = conn.getInputStream(); if (is = null) Log.d("tag","error"); throw new RuntimeException(
14、"没有读取到文件内容"); /*建立临时文件*/ File myTempFile = File.createTempFile(fileNa, "." + fileEx); myTempFile.getAbsolutePath(); /*将文件写入临时盘*/ FileOutputStream fos = new FileOutputStream(myTempFile); byte buf = new byte128; do int numread = is.read(buf); if (numread <= 0) break; fos.write(b
15、uf, 0, numread); while (true); /*打开文件进行安装*/ openFile(myTempFile); try is.close(); catch (Exception ex) Log.d("Tag","error"); Log.e(TAG, "error: " + ex.getMessage(), ex); /* 在手机上打开文件 */ private void openFile(File f) pBar.cancel(); Intent intent = new Intent(); intent.add
16、Flags(Intent.FLAG_ACTIVITY_NEW_TASK); /* 调用getMIMEType()来取得MimeType */ String type = getMIMEType(f); /* 设定intent的file与MimeType */ intent.setDataAndType(Uri.fromFile(f),type); mContext.startActivity(intent); /* 判断文件MimeType的method */ private String getMIMEType(File f) String type = "" Strin
17、g fName = f.getName(); /* 取得扩展名 */ String end = fName.substring(fName.lastIndexOf(".")+1,fName.length().toLowerCase(); /* 按扩展名的类型决定MimeType */ if(end.equals("m4a") | end.equals("mp3") | end.equals("mid") | end.equals("xmf") | end.equals("ogg&quo
18、t;) | end.equals("wav") type = "audio" else if(end.equals("3gp") | end.equals("mp4") type = "video" else if(end.equals("jpg") | end.equals("gif") | end.equals("png") | end.equals("jpeg") | end.equals("bmp&
19、quot;) type = "image" else if(end.equals("apk") else type = "*" /*如果无法直接打开,就跳出软件清单给使用者选择 */ if(!end.equals("apk") type += "/*" return type; private void getVersionxml(String resourceUrl) GetVer gv = new GetVer(); gv.execute(resourceUrl); private bool
20、ean load() Properties properties = new Properties(); try InputStream stream = mContext.getAssets().open(fileVer); /FileInputStream stream = mContext.openFileInput(fileVer); /读取文件内容 properties.load(stream); catch (FileNotFoundException e) return false; catch(IOException e) return false; catch(Exception e) return false; PastVersion = String.valueOf(properti
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年非甾体抗炎药物合作协议书
- 销售代理合作协议独家渠道政策
- 网络服务订购协议及用户使用规范
- 个人公司借款合同
- 农村家庭养殖场合作建设与管理协议
- 高校在线课程资源共享平台合作协议
- 2025年地热除砂器项目合作计划书
- 无人机飞行服务风险免责协议
- 管理心理学在高管培训中的效用试题及答案
- 个人包车包司机协议书
- 中国文化遗产资料长城100字
- 高中生物选择性必修1基础背诵 课件
- 辩论赛PPT模板模板
- 中国特色社会主义理论与实践研究教学大纲
- 2023-2024学年贵州省六盘水市小学语文六年级期末提升测试题详细参考答案解析
- GB/T 7702.7-2023煤质颗粒活性炭试验方法第7部分:碘吸附值的测定
- 提高我们的逆商
- 江苏南通轨道交通集团有限公司运营分公司社会招聘工作人员考试真题及答案2022
- 2024届一轮复习新人教版 实验17 测量玻璃的折射率 课件(35张)
- 起诉意见书(公安)
- 松下伺服驱动器说明书
评论
0/150
提交评论