注册 登录  
 加关注

网易博客网站关停、迁移的公告:

将从2018年11月30日00:00起正式停止网易博客运营
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

是缘是情是童真

如果你用笑脸面对 你会看见别人的笑脸

 
 
 

日志

 
 

Android自动检测版本及自动升级(1)  

2011-12-19 15:12:17|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

步骤:

1.检测当前版本的信息AndroidManifest.xml-->manifest-->android:versionName。

2.从服务器获取版本号(版本号存在于xml文件中)并与当前检测到的版本进行匹配,如果不匹配,提示用户进行升级,如果匹配则进入程序主界面。

3.当提示用户进行版本升级时,如果用户点击了确定,系统将自动从服务器上下载并进行自动升级,如果点击取消将进入程序主界面。

效果图:

      

    

获取当前程序的版本号:

  1. /* 
  2.  * 获取当前程序的版本号  
  3.  */  
  4. private String getVersionName() throws Exception{  
  5.     //获取packagemanager的实例   
  6.     PackageManager packageManager = getPackageManager();  
  7.     //getPackageName()是你当前类的包名,0代表是获取版本信息  
  8.     PackageInfo packInfo = packageManager.getPackageInfo(getPackageName(), 0);  
  9.     return packInfo.versionName;   
  10. }  
获取服务器端的版本号:

  1. /* 
  2.  * 用pull解析器解析服务器返回的xml文件 (xml封装了版本号) 
  3.  */  
  4. public static UpdataInfo getUpdataInfo(InputStream is) throws Exception{  
  5.     XmlPullParser  parser = Xml.newPullParser();    
  6.     parser.setInput(is, "utf-8");//设置解析的数据源   
  7.     int type = parser.getEventType();  
  8.     UpdataInfo info = new UpdataInfo();//实体  
  9.     while(type != XmlPullParser.END_DOCUMENT ){  
  10.         switch (type) {  
  11.         case XmlPullParser.START_TAG:  
  12.             if("version".equals(parser.getName())){  
  13.                 info.setVersion(parser.nextText()); //获取版本号  
  14.             }else if ("url".equals(parser.getName())){  
  15.                 info.setUrl(parser.nextText()); //获取要升级的APK文件  
  16.             }else if ("description".equals(parser.getName())){  
  17.                 info.setDescription(parser.nextText()); //获取该文件的信息  
  18.             }  
  19.             break;  
  20.         }  
  21.         type = parser.next();  
  22.     }  
  23.     return info;  
  24. }  
从服务器下载apk:

  1. public static File getFileFromServer(String path, ProgressDialog pd) throws Exception{  
  2.     //如果相等的话表示当前的sdcard挂载在手机上并且是可用的  
  3.     if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){  
  4.         URL url = new URL(path);  
  5.         HttpURLConnection conn =  (HttpURLConnection) url.openConnection();  
  6.         conn.setConnectTimeout(5000);  
  7.         //获取到文件的大小   
  8.         pd.setMax(conn.getContentLength());  
  9.         InputStream is = conn.getInputStream();  
  10.         File file = new File(Environment.getExternalStorageDirectory(), "updata.apk");  
  11.         FileOutputStream fos = new FileOutputStream(file);  
  12.         BufferedInputStream bis = new BufferedInputStream(is);  
  13.         byte[] buffer = new byte[1024];  
  14.         int len ;  
  15.         int total=0;  
  16.         while((len =bis.read(buffer))!=-1){  
  17.             fos.write(buffer, 0, len);  
  18.             total+= len;  
  19.             //获取当前下载量  
  20.             pd.setProgress(total);  
  21.         }  
  22.         fos.close();  
  23.         bis.close();  
  24.         is.close();  
  25.         return file;  
  26.     }  
  27.     else{  
  28.         return null;  
  29.     }  
  30. }  

参考:http://blog.csdn.net/furongkang/article/details/6886526
  评论这张
 
阅读(558)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018