注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

是缘是情是童真

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

 
 
 

日志

 
 

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

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

  下载LOFTER 我的照片书  |

匹配、下载、自动安装:

  1. /* 
  2.  * 从服务器获取xml解析并进行比对版本号  
  3.  */  
  4. public class CheckVersionTask implements Runnable{  
  5.   
  6.     public void run() {  
  7.         try {  
  8.             //从资源文件获取服务器 地址   
  9.             String path = getResources().getString(R.string.serverurl);  
  10.             //包装成url的对象   
  11.             URL url = new URL(path);  
  12.             HttpURLConnection conn =  (HttpURLConnection) url.openConnection();   
  13.             conn.setConnectTimeout(5000);  
  14.             InputStream is =conn.getInputStream();   
  15.             info =  UpdataInfoParser.getUpdataInfo(is);  
  16.               
  17.             if(info.getVersion().equals(versionname)){  
  18.                 Log.i(TAG,"版本号相同无需升级");  
  19.                 LoginMain();  
  20.             }else{  
  21.                 Log.i(TAG,"版本号不同 ,提示用户升级 ");  
  22.                 Message msg = new Message();  
  23.                 msg.what = UPDATA_CLIENT;  
  24.                 handler.sendMessage(msg);  
  25.             }  
  26.         } catch (Exception e) {  
  27.             // 待处理   
  28.             Message msg = new Message();  
  29.             msg.what = GET_UNDATAINFO_ERROR;  
  30.             handler.sendMessage(msg);  
  31.             e.printStackTrace();  
  32.         }   
  33.     }  
  34. }  
  35.   
  36. Handler handler = new Handler(){  
  37.       
  38.     @Override  
  39.     public void handleMessage(Message msg) {  
  40.         // TODO Auto-generated method stub  
  41.         super.handleMessage(msg);  
  42.         switch (msg.what) {  
  43.         case UPDATA_CLIENT:  
  44.             //对话框通知用户升级程序   
  45.             showUpdataDialog();  
  46.             break;  
  47.         case GET_UNDATAINFO_ERROR:  
  48.             //服务器超时   
  49.             Toast.makeText(getApplicationContext(), "获取服务器更新信息失败"1).show();  
  50.             LoginMain();  
  51.             break;    
  52.         case DOWN_ERROR:  
  53.             //下载apk失败  
  54.             Toast.makeText(getApplicationContext(), "下载新版本失败"1).show();  
  55.             LoginMain();  
  56.             break;    
  57.         }  
  58.     }  
  59. };  
  60.   
  61. /* 
  62.  *  
  63.  * 弹出对话框通知用户更新程序  
  64.  *  
  65.  * 弹出对话框的步骤: 
  66.  *  1.创建alertDialog的builder.   
  67.  *  2.要给builder设置属性, 对话框的内容,样式,按钮 
  68.  *  3.通过builder 创建一个对话框 
  69.  *  4.对话框show()出来   
  70.  */  
  71. protected void showUpdataDialog() {  
  72.     AlertDialog.Builder builer = new Builder(this) ;   
  73.     builer.setTitle("版本升级");  
  74.     builer.setMessage(info.getDescription());  
  75.     //当点确定按钮时从服务器上下载 新的apk 然后安装   
  76.     builer.setPositiveButton("确定"new OnClickListener() {  
  77.     public void onClick(DialogInterface dialog, int which) {  
  78.             Log.i(TAG,"下载apk,更新");  
  79.             downLoadApk();  
  80.         }     
  81.     });  
  82.     //当点取消按钮时进行登录  
  83.     builer.setNegativeButton("取消"new OnClickListener() {  
  84.         public void onClick(DialogInterface dialog, int which) {  
  85.             // TODO Auto-generated method stub  
  86.             LoginMain();  
  87.         }  
  88.     });  
  89.     AlertDialog dialog = builer.create();  
  90.     dialog.show();  
  91. }  
  92.   
  93. /* 
  94.  * 从服务器中下载APK 
  95.  */  
  96. protected void downLoadApk() {  
  97.     final ProgressDialog pd;    //进度条对话框  
  98.     pd = new  ProgressDialog(this);  
  99.     pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);  
  100.     pd.setMessage("正在下载更新");  
  101.     pd.show();  
  102.     new Thread(){  
  103.         @Override  
  104.         public void run() {  
  105.             try {  
  106.                 File file = DownLoadManager.getFileFromServer(info.getUrl(), pd);  
  107.                 sleep(3000);  
  108.                 installApk(file);  
  109.                 pd.dismiss(); //结束掉进度条对话框  
  110.             } catch (Exception e) {  
  111.                 Message msg = new Message();  
  112.                 msg.what = DOWN_ERROR;  
  113.                 handler.sendMessage(msg);  
  114.                 e.printStackTrace();  
  115.             }  
  116.         }}.start();  
  117. }  
  118.   
  119. //安装apk   
  120. protected void installApk(File file) {  
  121.     Intent intent = new Intent();  
  122.     //执行动作  
  123.     intent.setAction(Intent.ACTION_VIEW);  
  124.     //执行的数据类型  
  125.     intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");  
  126.     startActivity(intent);  
  127. }  
  128.   
  129. /* 
  130.  * 进入程序的主界面 
  131.  */  
  132. private void LoginMain(){  
  133.     Intent intent = new Intent(this,MainActivity.class);  
  134.     startActivity(intent);  
  135.     //结束掉当前的activity   
  136.     this.finish();  
  137. }  


UpdataInfo:

  1. public class UpdataInfo {  
  2.     private String version;  
  3.     private String url;  
  4.     private String description;  
  5.     public String getVersion() {  
  6.         return version;  
  7.     }  
  8.     public void setVersion(String version) {  
  9.         this.version = version;  
  10.     }  
  11.     public String getUrl() {  
  12.         return url;  
  13.     }  
  14.     public void setUrl(String url) {  
  15.         this.url = url;  
  16.     }  
  17.     public String getDescription() {  
  18.         return description;  
  19.     }  
  20.     public void setDescription(String description) {  
  21.         this.description = description;  
  22.     }  
  23. }  


update.xml:

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <info>  
  3.     <version>2.0</version>  
  4.     <url>http://192.168.1.187:8080/mobilesafe.apk</url>  
  5.     <description>检测到最新版本,请及时更新!</description>  
  6. </info>  

  评论这张
 
阅读(1550)| 评论(4)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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