Android自动检测版本及自动升级

[日期:2011-10-21] 来源:Linux社区 作者:furongkang

步骤:

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

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

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

效果图:


获取当前程序的版本号:

  1. /*
  2. *获取当前程序的版本号
  3. */
  4. privateStringgetVersionName()throwsException{
  5. //获取packagemanager的实例
  6. PackageManagerpackageManager=getPackageManager();
  7. //getPackageName()是你当前类的包名,0代表是获取版本信息
  8. PackageInfopackInfo=packageManager.getPackageInfo(getPackageName(),0);
  9. returnpackInfo.versionName;
  10. }
获取服务器端的版本号:
  1. /*
  2. *用pull解析器解析服务器返回的xml文件(xml封装了版本号)
  3. */
  4. publicstaticUpdataInfogetUpdataInfo(InputStreamis)throwsException{
  5. XmlPullParserparser=Xml.newPullParser();
  6. parser.setInput(is,"utf-8");//设置解析的数据源
  7. inttype=parser.getEventType();
  8. UpdataInfoinfo=newUpdataInfo();//实体
  9. while(type!=XmlPullParser.END_DOCUMENT){
  10. switch(type){
  11. caseXmlPullParser.START_TAG:
  12. if("version".equals(parser.getName())){
  13. info.setVersion(parser.nextText());//获取版本号
  14. }elseif("url".equals(parser.getName())){
  15. info.setUrl(parser.nextText());//获取要升级的APK文件
  16. }elseif("description".equals(parser.getName())){
  17. info.setDescription(parser.nextText());//获取该文件的信息
  18. }
  19. break;
  20. }
  21. type=parser.next();
  22. }
  23. returninfo;
  24. }
从服务器下载apk:
  1. publicstaticFilegetFileFromServer(Stringpath,ProgressDialogpd)throwsException{
  2. //如果相等的话表示当前的sdcard挂载在手机上并且是可用的
  3. if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
  4. URLurl=newURL(path);
  5. HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
  6. conn.setConnectTimeout(5000);
  7. //获取到文件的大小
  8. pd.setMax(conn.getContentLength());
  9. InputStreamis=conn.getInputStream();
  10. Filefile=newFile(Environment.getExternalStorageDirectory(),"updata.apk");
  11. FileOutputStreamfos=newFileOutputStream(file);
  12. BufferedInputStreambis=newBufferedInputStream(is);
  13. byte[]buffer=newbyte[1024];
  14. intlen;
  15. inttotal=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. returnfile;
  26. }
  27. else{
  28. returnnull;
  29. }
  30. }

更多相关文章

  1. Android源码获取方法
  2. Android系统信息获取 之四:系统语言信息获取
  3. This Android(安卓)SDK requires Android(安卓)Developer Toolki
  4. 最新android sdk版本号和sdk的对应关系
  5. Android在Activity中取消EditText自动获取焦点的默认行为
  6. android 截取头像
  7. 如何通过网页打开Android(安卓)APP
  8. Android和J2ME按钮接口之简单对比
  9. 如何使Android应用程序获取系统权限来修改系统时间

随机推荐

  1. Wear OS手表应用开发教程之-创建环形滚动
  2. Android(安卓)IPC 机制详解:IBinder
  3. 总结一下Android中主题(Theme)的正确玩法
  4. android开发每日汇总【2011-8-25】
  5. 【方案汇总】Android NDK编译时版本异常
  6. 修改android statusbar颜色
  7. 第一讲Android简介与环境搭建
  8. android widget 桌面插件的简单事例讲解
  9. Android中通过typeface设置字体
  10. Android一些学习的小点