android 自动更新(适配6.0-9.0)_com.qianwen:update-app:3.5.2-程序员宅基地

技术标签: Android  

使用GitHub开源的项目AppUpdate使用文档也写的非常清楚

1.设置Gradle 依赖

dependencies {
    compile 'com.qianwen:update-app:3.5.2'
}

2.设置get方式请求服务器获取是否更新的JSON数据,返回的数据格式参加开源项目的使用文档

3.在需要app调用更新的时候引用下面代码并且更新下载

new UpdateAppManager
                .Builder()
                //当前Activity
                .setActivity(this)
                //更新地址
                .setUpdateUrl(mUpdateUrl)
                //实现httpManager接口的对象
                .setHttpManager(new UpdateAppHttpUtil())
                .build()
                .update();

4.其中需要自己实现UpdateAppHttpUtil类给类实现接口HttpManager

我的这个UpdateAppHttpUtil实现代码如下(由okhttp3实现)

(需要gradle依赖

implementation 'com.zhy:okhttputils:2.6.2'
implementation 'com.squareup.okhttp3:okhttp:3.14.2'

import android.support.annotation.NonNull;
import com.vector.update_app.HttpManager;
import com.zhy.http.okhttp.OkHttpUtils;
import com.zhy.http.okhttp.callback.FileCallBack;
import com.zhy.http.okhttp.callback.StringCallback;

import java.io.File;
import java.util.Map;


import okhttp3.Call;
import okhttp3.Request;

public class UpdateAppHttpUtil implements HttpManager {
    /**
     * 异步get
     *
     * @param url      get请求地址
     * @param params   get参数
     * @param callBack 回调
     */
    @Override
    public void asyncGet(@NonNull String url, @NonNull Map<String, String> params, @NonNull final Callback callBack) {
        OkHttpUtils.get()
                .url(url)
                .params(params)
                .build()
                .execute(new StringCallback() {
                   @Override
                    public void onError(Call call, Exception e, int id) {
                        callBack.onError("回调错误");
                    }

                    @Override
                    public void onResponse(String response, int id) {
                           callBack.onResponse(response);
                    }
                });
    }

    /**
     * 异步post
     *
     * @param url      post请求地址
     * @param params   post请求参数
     * @param callBack 回调
     */
    @Override
    public void asyncPost(@NonNull String url, @NonNull Map<String, String> params, @NonNull final Callback callBack) {
        OkHttpUtils.post()
                .url(url)
                .params(params)
                .build()
                .execute(new StringCallback() {

                    @Override
                    public void onError(Call call, Exception e, int id) {
                        callBack.onError("");
                    }

                    @Override
                    public void onResponse(String response, int id) {
                        callBack.onResponse(response);
                    }
                });

    }

    /**
     * 下载
     *
     * @param url      下载地址
     * @param path     文件保存路径
     * @param fileName 文件名称
     * @param callback 回调
     */
    @Override
    public void download(@NonNull String url, @NonNull String path, @NonNull String fileName, @NonNull final FileCallback callback) {
        OkHttpUtils.get()
                .url(url)
                .build()
                .execute(new FileCallBack(path, fileName) {
                    @Override
                    public void inProgress(float progress, long total, int id) {
                        callback.onProgress(progress, total);
                    }

                    @Override
                    public void onError(Call call, Exception e, int id) {
                        callback.onError("");
                    }



                    @Override
                    public void onResponse(File response, int id) {
                        callback.onResponse(response);

                    }

                    @Override
                    public void onBefore(Request request, int id) {
                        super.onBefore(request, id);
                        callback.onBefore();
                    }
                });
    }
}

 

其它方法的具体使用参见https://github.com/WVector/AppUpdate/blob/master/java.md

该篇文件也介绍的挺好可以参考https://www.jianshu.com/p/9bb99720b420

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wangluoyang/article/details/92802909

智能推荐

Django Rest Framework-----解析器-程序员宅基地

文章浏览阅读125次。为什么要有解析器?原因很简单,当后台和前端进行交互的时候数据类型不一定都是表单数据或者json,当然也有其他类型的数据格式,比如xml,所以需要解析这类数据格式就需要用到解析器(也可以将请求体拿到,然后利用其他模块进行解析)。  class APIView(View): # The following policies may be set at either ..._django rest framework的解析器

【人工智能】距离空间(最基本的数学模型)_距离空间圆-程序员宅基地

文章浏览阅读3.9k次。纵观人类文明的历史,对事物性质的描述中,既然能用数,就说明有了“量”的概念;既然有了“量”就必然要解决,如何度量?量与量如何比较?这是无法回避的问题,距离空间就是度量空间,是“量”的具体化、关于度量的理论,本文将详细介绍各种度量机制的特点。_距离空间圆

vue3 中使用pinia报错 pinia.mjs:1696 Uncaught Error: []: getActivePinia was called with no active Pinia._pinia.mjs:1696 uncaught error: [頎柬綅]: getactivepin-程序员宅基地

文章浏览阅读2k次。vue3 中使用pinia报错 pinia.mjs:1696 Uncaught Error: []: getActivePinia was called with no active Pinia._pinia.mjs:1696 uncaught error: [頎柬綅]: getactivepinia was called with no act

关于结构体里面的字符串指针输出出现乱码的问题与结构体数组作为参数传值的问题_指针指向字符型后面总是乱码怎么回事-程序员宅基地

文章浏览阅读8.4k次,点赞5次,收藏25次。首先,结构体里面的字符串指针输出出现乱码的问题:相信很多遇到过这种问题的人都跟我一样写过这样的代码(好吧,或许不一样。。。):#include#includetypedef struct{ int age; const char* name; const char* id;}person;person p();int main(){ person s[1]; s[0]=_指针指向字符型后面总是乱码怎么回事

python练手经典100例-10 个最值得 Python 新人练手的有趣项目-程序员宅基地

文章浏览阅读810次。原标题:10 个最值得 Python 新人练手的有趣项目 作者 | Claire D. Costa编译 | Wendy有很多 Python 新手留言问:"Python 入门很久了,但项目经验很少,有没有什么项目,可以让自己实践一下呢?”这是个很普遍的问题,首先你要想好做什么类别的项目,总体来说,项目分为三类:Web构建一个 Web 应用发布在网络上让用户访问使用。需要实现 Web 应用的..._python练习项目

踩坑: Uncaught (in promise) TypeError: Object(...) is not a function at eval_ncaught typeerror: object(...) is not a function a-程序员宅基地

文章浏览阅读3.3w次,点赞20次,收藏20次。前言: 在使用UI自动化测试平台时,有不顺手的功能,自己尝试新增functions时,踩到了这个坑里,花了几个小时(昨天还是没弄懂的情况)作者:变优秀的小白Github:关注YX-XiaoBai爱好:Americano More Ice !QQ学习交流群(new): 811792998啥坑?报错Error: Uncaught (in promise) TypeError: Object(...) is not a function at eval解决事出有因: 原来是 export ._ncaught typeerror: object(...) is not a function at eval

随便推点

元空间和直接内存_一文让你搞懂JVM内存管理(上)-程序员宅基地

文章浏览阅读382次。我将分上下两节来带大家了解JVM的内存管理机制只要是Java程序员估计都体验过程序中的内存泄漏和OOM异常吧。为了剖析这类问题,理解JVM内存及其管理的内容和方式是极其重要的。JVM的一大优点是内存的自动管理。什么是内存管理内存管理就是一种管理对象的分配和回收的机制。JVM内的这种自动内存管理是由一个名为垃圾回收器(Garbage Collector)的系统执行的。自动内存管理是如何工作的JVM中..._jvm 直接内存 元空间

接口幂等性要怎么防止_怎么防止幂等-程序员宅基地

文章浏览阅读372次。接口的幂等性是什么?直接百度就可以出来,百度百科中是这么解释幂等的,在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。那么在我们平时开发的时候这种接口幂等性遇到的多么?我经历的这几家公司差不多每次都会遇到这种因为多次操作导致接口不幂等的情况,每次也很无奈的去直接操作数据库,把多余的数据删除了。前端时间,我所负责的一个业务就出现了接口频繁操作,导致数据重复的情况,而且持续了好长一段时间,测试大佬们也每天都在催着我解决这个问题。等我看完代码的时候我发现,我在核心的代码里面_怎么防止幂等

百度地图应用之将google坐标转成百度坐标_怎样把手机谷歌定位换成百度定位-程序员宅基地

文章浏览阅读817次。百度地图 将google坐标转成百度坐标_怎样把手机谷歌定位换成百度定位

Firefly单卡复刻Vicuna-13B,Open LLM榜单略高0.2分-程序员宅基地

文章浏览阅读157次。来自:YeungNLP进NLP群—>加入NLP交流群01前言在过去的几个月里,经过不断的迭代更新,Firefly项目已支持对LLaMA-2、Ziya、Baichuan、InternLM、LLaMA-1、Bloom等模型进行指令微调,并且开源了多个经过中文指令微调的模型权重,获得了很多同学的支持。目前本项目在Github上获得了1100+star️,感谢大家的关注和支持。此前,我们花了较多精...

lseek函数--Linux文件管理之文件IO(三)_lseek(fd, 0, seek_set);-程序员宅基地

文章浏览阅读369次。头文件#include<unistd.h>功能用来度量从文件开始出计算的字节数,通常读写都是从文件的当前文件偏移量处开始,并且会在读写完成之后更新偏移量的位置正常打开一个文件的时候偏移量都0,如果指定了参数O_APPEND,会将偏移量移动到最后函数原型off_t lseek(int filedes, off_t offset, int whence)参数说明1、filedes: 文件描述符2、whence:SEEK_SET:设置文件偏移量为offset,从_lseek(fd, 0, seek_set);

VMware安装银河麒麟高级服务器操作系统V10_虚拟机vmware安装非桌面银河麒麟系统-程序员宅基地

文章浏览阅读451次。近期,随着国产信创的持续发热和大众关注度的上升,我们公司决定与时俱进,针对国产技术趋势进行相应的策略调整。为确保我们的业务与技术发展能够紧密结合,我们选定了银河麒麟高级服务器操作系统V10版本作为部署和开发的首选环境。如果有意向了解或使用银河麒麟系统,使用银河麒麟系统需要到官网进行申请,官网地址:https://www.kylinos.cn/_虚拟机vmware安装非桌面银河麒麟系统