美文网首页Android Demo项目我们就爱程序媛
Android 版本更新(自定义接口协议)

Android 版本更新(自定义接口协议)

作者: 千匍 | 来源:发表于2017-07-04 16:42 被阅读487次

    项目地址「AppUpdateDemo

    Android 版本更新

    目录

    功能介绍

    • [x] 实现app版本更新
    • [x] 自定义接口协议,可以不改变现有项目的协议就能使用
    • [x] 支持get,post请求
    • [x] 支持进度显示,对话框进度条,和通知栏进度条展示
    • [x] 支持后台下载
    • [x] 支持强制更新
    • [x] 支持简单主题色配置(可以自动从顶部图片提取主色)
    • [x] 完美支持android7.0

    效果图与示例 apk

    点击下载 Demo.apk 或扫描下面的二维码安装

    Demo apk文件二维

    Gradle 依赖

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

    2, 服务器的返回json格式

    1,有新版本
    
    
    {
      "update": "Yes",//有新版本
      "new_version": "0.8.3",//新版本号
      "apk_file_url": "https://raw.githubusercontent.com/WVector/AppUpdateDemo/master/apk/app-debug.apk", //apk下载地址
      "update_log": "1,添加删除信用卡接口\r\n2,添加vip认证\r\n3,区分自定义消费,一个小时不限制。\r\n4,添加放弃任务接口,小时内不生成。\r\n5,消费任务手动生成。",//更新内容
      "target_size": "5M",//apk大小
      "constraint": false//是否强制更新
    }
    
    
    2,没有新版本
    
    
    {
      "update": "No",//没有新版本
    }
    
    

    1,根据自己项目使用的网络框架,自己实现HttpManager接口,

    
        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, Response response, Exception e, int id) {
                                callBack.onError(validateError(e, response));
                            }
        
                            @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, Response response, Exception e, int id) {
                                callBack.onError(validateError(e, response));
                            }
        
                            @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) {
                                super.inProgress(progress, total, id);
                                callback.onProgress(progress, total);
                            }
        
                            @Override
                            public void onError(Call call, Response response, Exception e, int id) {
                                callback.onError(validateError(e, response));
                            }
        
                            @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();
                            }
                        });
        
            }
        }
    
    

    3,客户端检测是否有新版本,并且更新下载

    
        String updateUrl = "https://raw.githubusercontent.com/WVector/AppUpdateDemo/master/json/json.txt";
        new UpdateAppManager
                .Builder()
                //当前Activity
                .setActivity(this)
                //实现httpManager接口的对象
                .setHttpManager(new UpdateAppHttpUtil())
                //更新地址
                .setUpdateUrl(updateUrl)
                .build()
                //检测是否有新版本
                .checkNewApp(new UpdateCallback() {
                    /**
                     * 有新版本
                     * @param updateApp 新版本信息
                     * @param updateAppManager app更新管理器
                     */
                    @Override
                    public void hasNewApp(UpdateAppBean updateApp, UpdateAppManager updateAppManager) {
                        updateAppManager.showDialog();
                    }
        
                    /**
                     * 网络请求之前
                     */
                    @Override
                    public void onBefore() {
                        CProgressDialogUtils.showProgressDialog(MainActivity.this);
                    }
        
                    /**
                     * 网路请求之后
                     */
                    @Override
                    public void onAfter() {
                        CProgressDialogUtils.cancelProgressDialog(MainActivity.this);
                    }
        
                    /**
                     * 没有新版本
                     */
        
                    @Override
                    public void noNewApp() {
                        Toast.makeText(MainActivity.this, "没有新版本", Toast.LENGTH_SHORT).show();
                    }
                });
    
                    
    

    项目地址「AppUpdateDemo

    本项目进度条使用的是代码家的「NumberProgressBar

    相关文章

      网友评论

      本文标题:Android 版本更新(自定义接口协议)

      本文链接:https://www.haomeiwen.com/subject/ltjxhxtx.html