zoukankan      html  css  js  c++  java
  • Android开发之应用程序更新实现

    近期给项目app做升级。对Android应用程序更新稍有研究,分享一下我的心得。

    既然是更新,那么一定是要联网和下载的。所以联网和存储訪问权限时一定要有的:

    <!-- 权限申请 -->
        <uses-permission android:name="android.permission.INTERNET" /> <!-- 联网权限 -->
        <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <!-- 存储权限 -->
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    能够用xml的方式和数据库、php等方式检測升级版本号

    XML:

    <?

    xml version="1.0" encoding="utf-8"?>
    <update>
            <version>2.0<ersion>
            <description>这里写一些这个版本号的特点</description>
            <apkurl>填写应用下载下载地址</apkurl>
            <!--这里的ip地址一定要写你server所在的电脑的ip地址。我们会在Security这个文件夹以下放置一下new.apk的,用来更新的-->
    </update>

    匹配一下:

    public class UpdateInfoParser {
    public static UpdateInfo getUpdateInfo(InputStream is) throws Exception {
    UpdateInfo info = new UpdateInfo();
    XmlPullParser xmlPullParser = Xml.newPullParser();
    xmlPullParser.setInput(is, "utf-8");
    int type = xmlPullParser.getEventType();
    while (type != XmlPullParser.END_DOCUMENT) {
    switch (type) {
    case XmlPullParser.START_TAG:
    if (xmlPullParser.getName().equals("version")) {
    info.setVersion(xmlPullParser.nextText());
    } else if (xmlPullParser.getName().equals("description")) {
    info.setDescription(xmlPullParser.nextText());
    } else if (xmlPullParser.getName().equals("apkurl")) {
    info.setUrl(xmlPullParser.nextText());
    }
    break;
    default:
    break;
    }
    type = xmlPullParser.next();
    }
    return info;
    }
    }

    HTTP请求:

    public class UpdateInfoService {
    private Context context;

    public UpdateInfoService(Context context) {
    this.context = context;
    }

    public UpdateInfo getUpdateInfo(int urlId) throws Exception {
    String path = context.getResources().getString(urlId);// 拿到config.xml里面存放的地址
    URL url = new URL(path);
    HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();// 开启一个http链接
    httpURLConnection.setConnectTimeout(5000);// 设置链接的超时时间,如今为5秒
    httpURLConnection.setRequestMethod("GET");// 设置请求的方式
    InputStream is = httpURLConnection.getInputStream();// 拿到一个输入流。里面包涵了update.xml的信息
    return UpdateInfoParser.getUpdateInfo(is);// 解析xml
    }
    }

    然后就能够依据与获取到的数据相比較而且下载更新了。

    其它的做法和这个类似,只是此种方式比較简单一些,也是最频繁的使用方式。


    个人辛勤劳动成果。如有转载,请注明出处,谢谢!

  • 相关阅读:
    Azkaban的使用
    Azkaban安装
    Kafka 启动失败,报错Corrupt index found以及org.apache.kafka.common.protocol.types.SchemaException: Error reading field 'version': java.nio.BufferUnderflowException
    Kafka 消费者设置分区策略及原理
    Kafka利用Java API自定义生产者,消费者,拦截器,分区器等组件
    zookeeper群起总是有那么几个节点起不来的问题解决
    flume 启动agent报No appenders could be found for logger的解决
    Flume 的监控方式
    Flume 自定义 组件
    Source r1 has been removed due to an error during configuration java.lang.IllegalArgumentException: Required parameter bind must exist and may not be null & 端口无法连接
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6789999.html
Copyright © 2011-2022 走看看