UpdateAppHttpUtils

时间:2021-08-21 18:51:19

基于第三方框架update-app,这个工具类有待完善,这里只是保存一下

compile 'com.qianwen:update-app:3.5.2'
import android.app.Activity;
import android.support.annotation.NonNull;
import android.text.TextUtils;

import com.vector.update_app.HttpManager;
import com.vector.update_app.UpdateAppBean;
import com.vector.update_app.UpdateAppManager;
import com.vector.update_app.UpdateCallback;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

import cn.dongchen.bigsteward.library_common.R;
import cn.dongchen.bigsteward.library_common.gson.VersionGson;
import cn.dongchen.bigsteward.library_common.network.RetrofitUtils;
import cn.dongchen.bigsteward.library_common.network.result.BaseData;
import cn.dongchen.bigsteward.library_common.permission.PermissionCallBack;
import cn.dongchen.bigsteward.library_common.permission.PermissionsUtils;
import cn.dongchen.bigsteward.library_common.rx.BaseObserver;
import cn.dongchen.bigsteward.library_common.rx.BaseRxJava;
import cn.dongchen.bigsteward.library_common.toast.ToastUtils;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;

/**
 * @author fada
 *         下载工具类
 */

public class UpdateAppHttpUtil implements HttpManager {
    /**
     * 更新版本
     *
     * @param activity
     */
    public static void updateVersion(Activity activity, boolean needToast) {
        new PermissionsUtils
                .Build()
                .permissions(PermissionsUtils.PERMISSION_WRITE_EXTERNAL_STORAGE)
                .message("允许应用程序写入外部存储")
                .permissionCallBack(new PermissionCallBack() {
                    @Override
                    public void granted() {
                        update(activity, needToast);
                    }

                    @Override
                    public void refuse() {
                        ToastUtils.getInstance().showText("您拒绝了权限,无法继续更新");
                    }

                    @Override
                    public void noAgain() {
                        ToastUtils.getInstance().showText("您拒绝了权限,无法继续更新");
                    }
                })
                .build()
                .getPermission(activity);
    }

    /**
     * 更新app
     *
     * @param activity
     * @param needToast
     */
    private static void update(Activity activity, boolean needToast) {
        Map<String, String> params = new HashMap<>(2);
        params.put("versionNum", SystemUtils.getVersionName(activity));
        params.put("type", "0");
        new UpdateAppManager
                .Builder()
                //当前Activity
                .setActivity(activity)
                //更新地址
                .setUpdateUrl("http://122.225.55.70:9880/Butler/checkVersionApp")
                .setParams(params)
                //实现httpManager接口的对象
                .setHttpManager(new UpdateAppHttpUtil())
                //设置主体色
                .setThemeColor(activity.getResources().getColor(R.color.colorAccent))
                //设置头图片
                .setTopPic(R.drawable.update_dada)

                .build()
                .checkNewApp(new UpdateCallback() {
                    @Override
                    protected UpdateAppBean parseJson(String json) {
                        UpdateAppBean updateAppBean = new UpdateAppBean();
                        if (TextUtils.isEmpty(json)) {
                            updateAppBean.setUpdate("No");
                            if (needToast) {
                                ToastUtils.getInstance().showText("已经是最新版了");
                            }
                            return updateAppBean;
                        }
                        VersionGson version = GsonUtils.getInstance().fromJson(json,
                                VersionGson.class);
                        //是否需要更新
                        updateAppBean.setUpdate("Yes");
                        //文件地址
                        updateAppBean.setApkFileUrl(version.getUploadUrl());
                        //新版本号
                        updateAppBean.setNewVersion(version.getVersionNum());
                        //强制更新
                        updateAppBean.setConstraint(version.getNeedForceUpdate() == 0);
                        //设置内容
                        updateAppBean.setUpdateLog(version.getUpdateContent());
                        return updateAppBean;
                    }

                    @Override
                    protected void hasNewApp(UpdateAppBean updateApp, UpdateAppManager
                            updateAppManager) {
                        super.hasNewApp(updateApp, updateAppManager);
                    }

                    @Override
                    protected void onAfter() {
                        super.onAfter();
                    }

                    @Override
                    protected void noNewApp(String error) {
                        super.noNewApp(error);
                    }

                    @Override
                    protected void onBefore() {
                        super.onBefore();
                    }
                });
    }

    /**
     * 异步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) {
        Observable<BaseData<VersionGson>> observable = RetrofitUtils
                .getInstance()
                .getServerices()
                .checkVersion(params);

        BaseRxJava.bindRx(observable, new BaseObserver<BaseData<VersionGson>>() {
            @Override
            public void onError(String error) {
                callBack.onError(error);
            }

            @Override
            public void onNext(BaseData<VersionGson> versionGsonBaseData) {
                VersionGson data = versionGsonBaseData.getData();
                if (data != null && versionGsonBaseData.getCode() != 0) {
                    callBack.onResponse(data.toString());
                } else {
                    callBack.onResponse("");
                }
            }

            @Override
            public void onComplete() {

            }
        });
    }

    /**
     * 异步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) {
    }

    /**
     * 下载
     *
     * @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) {
        LogUtils.d("download() called with: url = ["   url   "], path = ["   path   "], fileName "  
                "= ["   fileName   "], callback = ["   callback   "]");
        callback.onBefore();
        RetrofitUtils
                .getInstance()
                .getServerices()
                .downloadFile(url)
                .subscribeOn(Schedulers.io())
                .map(responseBody -> {
                    File file = new File(path);
                    //目录是否存在,不存在则创建
                    if (!file.exists()) {
                        file.mkdir();
                    }
                    //创建文件
                    file = new File(file, fileName);

                    //文件读写
                    byte[] bytes = new byte[1024 * 1024];
                    int len = 0;
                    final long total = responseBody.contentLength();
                    long sum = 0;

                    FileOutputStream outputStream = new FileOutputStream(file);
                    InputStream inputStream = responseBody.byteStream();

                    while ((len = inputStream.read(bytes)) != -1) {
                        outputStream.write(bytes, 0, len);
                        outputStream.flush();
                        sum  = len;

                        final float progress = sum * 1.0f / total;
                        RetrofitUtils.getInstance().getRetrofit().callbackExecutor().execute(() -> {
                            callback.onProgress(progress, total);
                        });
                    }

                    //关闭流
                    outputStream.close();
                    inputStream.close();

                    return file;
                })
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new BaseObserver<File>() {
                    @Override
                    public void onError(String error) {
                        callback.onError(error);
                    }

                    @Override
                    public void onNext(File file) {
                        callback.onResponse(file);
                    }

                    @Override
                    public void onComplete() {
                    }
                });
    }
}

原文:大专栏  UpdateAppHttpUtils


相关文章