Android apk版本检测及更新

来源:互联网 发布:aperture软件 编辑:程序博客网 时间:2024/05/04 19:57

很多Android应用都具有版本检测自动更新功能,用户一键就可以完成软件的升级更新。这得益于Android系统的软件包管理和安装机制,这一功能实现起来也很简单。
 
Android的apk版本信息的获取:
定义在androidmanifest.xml里
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.huazi.updateapksamples"
      android:versionCode="1"
      android:versionName=" 1.0.0">
 
      <application ></application>
</manifest>
 
注意红色加粗字段,这个就是版本信息,其中versionCode常用来新旧版本的比较。
至于怎么在code里获取版本信息呢?
方法如下:
    PackageInfo info = getPackageManager().getPackageInfo("com.huazi.mylive", 0);
    String versionName = info.versionName;
int versionCode = info.versionCode;   
 
关键源码说明:
1、 ver.json 用于服务器上软件版本检测
[{"appname":"updateapksamples","apkname":"updateapksamples.apk","verName":1.0.1,"verCode":2}] 
 
2、服务器上版本获取,也即解析json
private boolean getServerVerCode() {
              try {
                     String verjson = NetworkTool.getContent(Config.UPDATE_SERVER
                                   + Config.UPDATE_VERJSON);
                     JSONArray array = new JSONArray(verjson);
                     if (array.length() > 0) {
                            JSONObject obj = array.getJSONObject(0);
                            try {
                                   newVerCode = Integer.parseInt(obj.getString("verCode"));
                                   newVerName = obj.getString("verName");
                            } catch (Exception e) {
                                   newVerCode = -1;
                                   newVerName = "";
                                   return false;
                            }
                     }
              } catch (Exception e) {
                     Log.e(TAG, e.getMessage());
                     return false;
              }
              return true;
       }
 
3、当前软件版本获取
       public static int getVerCode(Context context) {
              int verCode = -1;
              try {
                     verCode = context.getPackageManager().getPackageInfo(
                                   "com.huazi.updateapksamples", 0).versionCode;
              } catch (NameNotFoundException e) {
                     Log.e(TAG, e.getMessage());
              }
              return verCode;
       }
 
4. 下载模块
public class NetworkTool {
      
      
       public static String getContent(String url) throws Exception{
           StringBuilder sb = new StringBuilder();
          
           HttpClient client = new DefaultHttpClient();
           HttpParams httpParams = client.getParams();
           //设置网络超时参数
           HttpConnectionParams.setConnectionTimeout(httpParams, 3000);
           HttpConnectionParams.setSoTimeout(httpParams, 5000);
           HttpResponse response = client.execute(new HttpGet(url));
           HttpEntity entity = response.getEntity();
            if (entity != null) {BufferedReader reader = new BufferedReader(
new InputStreamReader(entity.getContent(), "UTF-8"), 8192);
              
               String line = null;
               while ((line = reader.readLine())!= null){
                   sb.append(line + "\n");
               }
               reader.close();
           }
           return sb.toString();
       }
}
 
下面,进行版本检测更新的测试!
 
1.修改andriodmanifest.xml
  android:versionCode="2"
  android:versionName="1.0.1"  
 修改string.xml
 <string name="hello">Hello World, UpdateActivity! new !</string>
 编译出apk到d:/myapp/ updateapksamples.apk
 
2.在d:/myapp/下建立ver.json,内容如下:
  [{"appname":"updateapksamples","apkname":"updateapksamples.apk","verName":1.0.1,"verCode":2}]
 
3.为d:/myapp配置一个tomcat的工作目录
方法如下:tomcat目录/conf/ server.xml的host字段增加红色部分
<Host name="localhost"  appBase="webapps"
            unpackWARs="true" >
            <Context path="/mp3" docBase="D:/mp3"></Context>
            <Context path="/myapp" docBase="D:/myapp"></Context>    
        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->
 
        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
               
      </Host>
 
测试配置结果:


Android <wbr>apk版本检测及更新
 
4. 修改andriodmanifest.xml
  android:versionCode="1"
  android:versionName="1.0.0"  
 修改string.xml
 <string name="hello">Hello World, UpdateActivity! </string>
 模拟器上运行:(运行结果)
 Android <wbr>apk版本检测及更新
 
  弹出对话框,说明软件版本检测成功!
 
5. 选择更新,在下载成功后,会提示replace application,选择OK,安装新版本apk,
然后运行新版本的apk,如下:
 
Android <wbr>apk版本检测及更新 
 
可以看到显示的字串后面多了内容 new!
版本内容也是服务器上的apk的版本信息,说明软件更新成功!

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 半框眼镜片掉了怎么办 选修差0.5个学分怎么办 脱产考博社保卡怎么办 幼儿上课不认真听讲怎么办 手机恢复的音频文件打不开怎么办 高考志愿填报不记得密码怎么办 经济纠纷案被告没有证据怎么办 管家婆管理员密码忘记了怎么办 人离职了公司扣发工资怎么办? 美国给我们断网怎么办 sci发表后发现错误怎么办 pos机按键是英文怎么办 蔚县县医院慢病本怎么办 知网下载的论文乱码怎么办 被期刊网骗了怎么办? 缝针缝到神经上怎么办 单位有个事特别多的领导怎么办 网上申请公司核名核不下来怎么办 老公把小三晒朋友圈老婆该怎么办 小三怀孕不愿意打掉怎么办 小三怀孕了引产怎么办 小三发现小四小三发现小四后怎么办 七十岁老人肺癌还有小三样怎么办 留学出国学历公认证怎么办 学历认证报告弄丢了怎么办 想读大专没考上怎么办 学信网身份证被注册了怎么办 学信网手机号换了密保忘了怎么办 学信网手机号改了密保忘了怎么办 学信网手机号忘了密保也忘了怎么办 学信网账号被注销了怎么办 原味奶酪太难吃怎么办 cma年费太贵了怎么办 会计证3年没年检怎么办 幼师面试没有什么特长怎么办 电子学历注册表过期了怎么办 学信网查不到电子注册登记表怎么办 学历证书电子注册备案表过期怎么办 举报人对处理结果不满意怎么办 亚马逊账号申诉后余额怎么办 怎么办北京市工会会员互助服务卡