Android 简单易用的应用更新库

来源:互联网 发布:互动投影软件下载 编辑:程序博客网 时间:2024/06/11 11:58

update

项目地址:czy1121/update
简介:清晰灵活简单易用的应用更新库

清晰灵活简单易用的应用更新库

  • 支持断点续传
  • 支持静默下载:有新版本时不提示直接下载
  • 支持强制安装:不安装无法使用 app
  • 支持下载完成后自动安装
  • 支持可忽略版本
  • 支持 app 启动时强制安装下载好了的更新包
  • 支持 POST 请求
  • 支持自定义解析服务器返回的数据
  • 支持自定义查询/下载
  • 支持自定义提示对话框/下载进度对话框
  • 支持通知栏进度显示
  • 适配 Android 7.0 FileProvider

update1 update2 update3 update4

Gradle

repositories {     maven { url "https://jitpack.io" }} dependencies {    compile 'com.github.czy1121:update:1.1.1'}

Usage

基本用法

默认情况下,查询请求会需要三个参数: 包名(package), 版本号(version), 渠道(channel) package/version 从应用的 context 获取

// 设置默认更新接口地址与渠道 UpdateManager.setUrl(mCheckUrl, "yyb");
// 进入应用时查询更新UpdateManager.check(context);
// 在设置界面点击检查更新UpdateManager.checkManual(context);
// 如果有已经下载好了的更新包就强制安装,可以在 app 启动时调用UpdateManager.install(context);

假设,包名是ezy.demo.update,版本号为123 传入地址 http://example.com/check,传入渠道 yyb 那请求的 url 是 http://example.com/check?package=ezy.demo.update&version=123&channel=yyb

设置请求 url

设置 url 后不会额外添加 package/version/channel 等参数

UpdateManager.create(this).setUrl(mCheckUrl).check();

发送 POST 请求

UpdateManager.create(this).setUrl(mCheckUrl).setPostData("param=abc&param2=xyz").check();

解析查询结果

查询结果需要解析成 UpdateInfo

public class UpdateInfo {    // 是否有新版本    public boolean hasUpdate = false;    // 是否静默下载:有新版本时不提示直接下载    public boolean isSilent = false;    // 是否强制安装:不安装无法使用 app    public boolean isForce = false;    // 是否下载完成后自动安装    public boolean isAutoInstall = true;    // 是否可忽略该版本    public boolean isIgnorable = true;    public int versionCode;    public String versionName;    public String updateContent;    public String url;    public String md5;    public long size;}

关于 md5

  1. 有新版本时,url 与 md5 字段为必填
  2. md5 始终是是 url 所表示的apk 文件内容的 md5,不是 keystore 的 md5
  3. md5 用于确保安装的是完整正确 apk,防止下载过程中 apk 内容被修改篡改替换
  4. 不知道如何获取文件 md5 可参考 Update.md5 或 google/baidu

可以定制解析过程

UpdateManager.create(this).setUrl(mCheckUrl).setParser(new IUpdateParser() {    @Override    public UpdateInfo parse(String source) throws Exception {        UpdateInfo info = new UpdateInfo();         // todo        return info;    }}).check();

定制查询

UpdateManager.create(this).setUrl(mCheckUrl).setChecker(new IUpdateChecker() {    @Override    public void check(ICheckAgent agent, String url) {        HttpURLConnection connection = null;        try {            connection = (HttpURLConnection) new URL(url).openConnection();            connection.setRequestProperty("Accept", "application/json");            connection.connect();            if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {                agent.setInfo(UpdateUtil.readString(connection.getInputStream()));            } else {                agent.setError(new UpdateError(UpdateError.CHECK_HTTP_STATUS, "" + connection.getResponseCode()));            }        } catch (IOException e) {            e.printStackTrace();            agent.setError(new UpdateError(UpdateError.CHECK_NETWORK_IO));        } finally {            if (connection != null) {                connection.disconnect();            }        }    }}).check();

定制下载

UpdateManager.create(this).setUrl(mCheckUrl).setDownloader(new IUpdateDownloader() {    @Override    public void download(IDownloadAgent agent, String url, File temp) {        new UpdateDownloader(agent, context, url, temp).execute();    }}).check();

更新版本对话框

UpdateManager.create(this).setPrompter(new IUpdatePrompter() {    @Override    public void prompt(IUpdateAgent agent) {        // todo : 根据 agent.getInfo() 显示更新版本对话框,具体可参考 UpdateAgent.DefaultUpdatePrompter    }}).check();

没有新版本或出错

UpdateManager.create(this).setOnFailure(new OnFailureListener() {    @Override    public void onFailure(UpdateError error) {          Toast.makeText(mContext, error.toString(), Toast.LENGTH_LONG).show();    }}).check();

显示下载进度

可在通知栏显示下载进度,当 info.isSilent 为 true 显示

默认通知栏进度

UpdateManager.create(this).setNotifyId(998).check();

定制通知栏进度

UpdateManager.create(this).setOnNotificationDownloadListener(new OnDownloadListener() {    @Override    public void onStart() {        // todo: start    }    @Override    public void onProgress(int progress) {        // todo: progress    }    @Override    public void onFinish() {        // todo: finish    }}).check();

定制下载进度的对话框,当 info.isSilent 为 false 显示

UpdateManager.create(this).setOnDownloadListener(new OnDownloadListener() {    @Override    public void onStart() {        // todo: start    }    @Override    public void onProgress(int progress) {        // todo: progress    }    @Override    public void onFinish() {        // todo: finish    }}).check();
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 浪琴手表日期中午跳怎么办 社保一体卡丢失了怎么办 京东付款七天不发货怎么办 电动车电机锁钥匙丢了怎么办 电瓶车锁钥匙丢了怎么办 苹果平板ld忘了怎么办 平板版本太低6.0怎么办 ios平板版本太低怎么办 微信公众号重名怎么办 发票规格型号填错了怎么办 鲁大师检测硬盘有问题怎么办 英文成绩单翻译错了怎么办 川航订机票名字写错了怎么办 亚航电子登机牌没有保存怎么办 cfa考试准考证名字有错怎么办 火车票护照号错了怎么办 国际机票名字错一个字怎么办 国际机票名字拼音错了怎么办 订机票名字写错了怎么办 亚航机票护照号写错怎么办 打发过了的奶油怎么办? 孩子生了没人带怎么办 办理退休审核未通过怎么办 整天沉迷全民k歌怎么办 吃鸡账号被误封了怎么办 手机换号了银行卡怎么办 评副高没有病房论文怎么办 收件人姓名写错了怎么办 汇款姓名写错了怎么办 在菲律宾旅游签证过期怎么办 微博转发被限制怎么办 百香果蜂蜜沉在下面怎么办 领导要潜我老婆怎么办 被领导潜了该怎么办 实习期单位领导开除我我该怎么办 泡泡袖显手臂肥怎么办 客人想吃霸王餐怎么办 在四楼上课时发生地震怎么办 学生在上课时发生地震怎么办 学生上课时发生地震怎么办 老板承诺的工资不兑现怎么办