QuiteVersion
用于Android App检测自动更新
实现效果
WeChatSight112.gif添加依赖
implementation 'com.xwdz:QuiteVersion:0.0.5'
implementation 'com.xwdz:okHttpUtils:1.0.4'
//如已依赖可忽略
implementation 'com.squareup.okhttp3:okhttp:3.5.0'
特点
- 任何地方都可以调用
- 支持自定义界面
- 支持强制下载最新Apk
- 自调起安装界面
- 简单
- 支持OKHttp拦截器
- 适配7.0
简单使用
DialogTest dialogTest = DialogTest.newInstance();
Quite.getInstance(this)
//or POST
.GET("http://www.baidu.com")
//强制每次更新都从网络下载最新Apk
.setForceDownload(true)
.setApkPath()
.setApkName()
.addHeader()
.setShowUIActivity()
.addParams()
.addInterceptor()
.addNetworkInterceptor()
//UI容器需实现OnUINotify接口
.setNotifyHandler(dialogTest)
.setOnNetworkParserListener(new OnNetworkParserListener() {
@Override
public ApkSource parser(String response) {
return new ApkSource(
kugou,
"更新内容如下\n1.你好\n2.我不好",
123123123,
123,
9999
);
}
})
.apply();
//界面销毁时注意释放资源
Quite.getInstance(this).recycle()
注意
开发者必须实现此接口,返回QuiteVersion需要的Apk信息,如果返回null,则视为没有新版本更新
setOnNetworkParserListener(new OnNetworkParserListener() {
@Override
public ApkSource parser(String response) {
return null;
}
})
QuiteVersion 执行更新App策略
- ApkSource.remoteVersionCode > 当前版本code
- todo
setApkName 以及setApkPath 说明
-
QuiteVersion 默认实现路径为
context.getExternalFilesDir("apk").getAbsolutePath() + File.separator + apkFilename
-
QuiteVersion 默认实现文件名称为
Url最后一个/ 至 .apk
,如酷狗 http://download.kugou.com/download/kugou_androidApkName为kugou_android.apk`
自定义容器Dialog
- 继承
AbstractActivity
实现自己的UI,重写如下三个方法,通过setShowUIActivity(xxx.class)
注入.
//自己定义的UI layout
public abstract int getContentLayoutId();
//数据初始化
public abstract void setUpData();
//当执行下载任务的时候回回调到此方法
public abstract void updateProgress(int percent, long currentLength, long total);
默认的ProgressDialogActivity也是基于此实现。
可通过String note = getIntent().getStringExtra("note")
拿到更新文本。
- 实现
OnUINotify
接口
在不指定.setNotifyHandler()方法以及
setShowUIActivity方法时默认实现效果参照文章开头
在自定义容器中实现此接口,在接口方法show
中调用真正的show
方法,详见simple-code
注意:自定义容器只能使用一种方式。
自定义容器中,点击开始下载时,需要调用如下代码
VersionHandler.startDownloadApk(getContext());
自定义容器中注册接受下载进度条组件
private final VersionHandler.ProgressReceiver mProgressReceiver = new VersionHandler.ProgressReceiver() {
@Override
public void onUpdateProgress(long total, long currentLength, int percent) {
Utils.LOG.i("tag", "current = " + currentLength);
}
};
//在容器创建等合适的时候调用注册代码
VersionHandler.registerProgressbarReceiver(getContext(), mProgressReceiver);
//容器销毁的时候调用注销代码
VersionHandler.unregisterProgressbarReceiver(getContext(), mProgressReceiver);
适配7.0
在AndroidManifest.xml添加如下代码
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="您的包名.fileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
在res文件夹下新建xml文件夹新建文件file_paths.xml添加如下代码
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path path="Android/data/您的包名/" name="files_root" />
<external-path path="." name="external_storage_root" />
</paths>
网友评论