简单好用的第三方Apk检查更新库,最近刚好做到需要检查更新的模块,不想重复造轮子,还是用现成的第三方框架来的实在。记录一下,以后直接copy使用。
因为更新界面也挺好看的,就默认使用默认UI了,以后项目中有需求再研究自定义UI。
build.gradle 配置依赖
//检查更新
implementation 'com.qianwen:update-app:3.5.1'
启动Activity中嵌入以下代码
new UpdateAppManager
.Builder()
.setActivity(getActivity())
.setUpdateUrl("http://example/api")// 更新地址
.setPost(true)// 使用POST
.setTargetPath(StorageUtil.getOwnCacheDirectory(getActivity(), DIR_APK).getAbsolutePath())
.setHttpManager(new HttpManager() { // 实现httpManager接口的对象
@Override
public void asyncGet(@NonNull String url, @NonNull Map<String, String> params, @NonNull Callback callBack) {
}
@Override
public void asyncPost(@NonNull String url, @NonNull Map<String, String> params, @NonNull Callback callBack) {
// 这边实现自己检查版本网络请求的代码
// 返回结果需要封装成JSON字符结果返回给框架,如下
Map<String, String> jsonObject = new HashMap<>();
jsonObject.put("update","Yes");
jsonObject.put("new_version","v1.0");
jsonObject.put("apk_file_url","http://127.0.0.1:8080/download/example.apk");
jsonObject.put("update_log","1,添加删除信用卡接口");
jsonObject.put("target_size","5M");
jsonObject.put("new_md5","A818AD325EACC199BC62C552A32C35F2");
jsonObject.put("constraint","true");// 是否强制更新
callBack.onResponse(MapperUtil.toJson(jsonObject));
}
@Override
public void download(@NonNull String url, @NonNull final String path, @NonNull final String fileName, @NonNull final FileCallback callback) {
callback.onBefore();// 告诉程序开始更新,显示进度条
// 另起线程模拟下载进度,
new Thread() {
@Override
public void run() {
for (int i = 1; i < 10; i++) {
final float v = i * 1f / 10;
handler.post(new Runnable() {
@Override
public void run() {
callback.onProgress(v, 10);
}
});
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
handler.post(new Runnable() {
@Override
public void run() {
// 完成后回调,进入安装界面
callback.onResponse(new File(path, fileName));
}
});
}
}.start();
}
})
.build().update();