項目地址「AppUpdateDemo」
Android 版本更新
目錄
功能介紹
- [x] 實現(xiàn)app版本更新
- [x] 自定義接口協(xié)議,可以不改變現(xiàn)有項目的協(xié)議就能使用
- [x] 支持get,post請求
- [x] 支持進度顯示馍资,對話框進度條膀捷,和通知欄進度條展示
- [x] 支持后臺下載
- [x] 支持強制更新
- [x] 支持簡單主題色配置(可以自動從頂部圖片提取主色)
- [x] 完美支持android7.0
效果圖與示例 apk
點擊下載 Demo.apk 或掃描下面的二維碼安裝
Gradle 依賴
dependencies {
compile 'com.qianwen:update-app:3.2.3'
}
自定義接口協(xié)議
自定義接口協(xié)議,根據(jù)自己項目的接口拿穴,自己實現(xiàn) parseJson 方法
Map<String, String> params = new HashMap<String, String>();
params.put("key1", "value1");
params.put("key2", "value2");
params.put("key3", "value3");
params.put("key4", "value4");
new UpdateAppManager
.Builder()
//當前Activity
.setActivity(this)
//實現(xiàn)httpManager接口的對象
.setHttpManager(new UpdateAppHttpUtil())
//設置請求方式 默認get,
.setPost(false)
//更新地址
.setUpdateUrl("https://raw.githubusercontent.com/WVector/AppUpdateDemo/master/json/json.txt")
//添加自定義參數(shù)
.setParams(params)
//設置頭部
.setTopPic(R.mipmap.top_5)
//設置主題色
.setThemeColor(0xff034ea0)
.build()
//檢測是否有新版本
.checkNewApp(new UpdateCallback() {
/**
* 解析json,自定義協(xié)議
*
* @param json 服務器返回的json
* @return UpdateAppBean
*/
@Override
protected UpdateAppBean parseJson(String json) {
UpdateAppBean updateAppBean = new UpdateAppBean();
try {
JSONObject jsonObject = new JSONObject(json);
updateAppBean
//是否更新Yes,No
.setUpdate(jsonObject.getString("update"))
//新版本號
.setNew_version(jsonObject.getString("new_version"))
//下載地址
.setApk_file_url(jsonObject.getString("apk_file_url"))
//大小
.setTarget_size(jsonObject.getString("target_size"))
//更新內(nèi)容
.setUpdate_log(jsonObject.getString("update_log"))
//是否強制更新
.setConstraint(jsonObject.getBoolean("constraint"));
} catch (JSONException e) {
e.printStackTrace();
}
return updateAppBean;
}
/**
* 有新版本
*
* @param updateApp 新版本信息
* @param updateAppManager app更新管理器
*/
@Override
public void hasNewApp(UpdateAppBean updateApp, UpdateAppManager updateAppManager) {
updateAppManager.showDialog();
}
/**
* 網(wǎng)絡請求之前
*/
@Override
public void onBefore() {
CProgressDialogUtils.showProgressDialog(MainActivity.this);
}
/**
* 網(wǎng)路請求之后
*/
@Override
public void onAfter() {
CProgressDialogUtils.cancelProgressDialog(MainActivity.this);
}
/**
* 沒有新版本
*/
@Override
public void noNewApp() {
Toast.makeText(MainActivity.this, "沒有新版本", Toast.LENGTH_SHORT).show();
}
});
使用默認的接口協(xié)議
接口說明
1泣洞,和服務器交互請求參數(shù)
1,appkey app的唯一標志
appkey可以在manifest文件中配置,也可以在代碼中添加
xml配置如下:
<meta-data
android:name="UPDATE_APP_KEY"
android:value="ab55ce55Ac4bcP408cPb8c1Aaeac179c5f6f"/>
2,version 版本號默色,工具自動添加(服務器判斷客戶端傳過來的version和服務器存的最新的version球凰,決定是否更新)
3, 服務器app后臺管理界面(下次放出服務器的代碼)
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呕诉,區(qū)分自定義消費缘厢,一個小時不限制。\r\n4甩挫,添加放棄任務接口贴硫,小時內(nèi)不生成。\r\n5伊者,消費任務手動生成英遭。",//更新內(nèi)容
"target_size": "5M",//apk大小
"constraint": false//是否強制更新
}
2,沒有新版本
{
"update": "No",//沒有新版本
}
1,根據(jù)自己項目使用的網(wǎng)絡框架亦渗,自己實現(xiàn)HttpManager接口挖诸,
class UpdateAppHttpUtil implements HttpManager {
/**
* 異步get
*
* @param url get請求地址
* @param params get參數(shù)
* @param callBack 回調(diào)
*/
@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請求參數(shù)
* @param callBack 回調(diào)
*/
@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 回調(diào)
*/
@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)
//實現(xiàn)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();
}
/**
* 網(wǎng)絡請求之前
*/
@Override
public void onBefore() {
CProgressDialogUtils.showProgressDialog(MainActivity.this);
}
/**
* 網(wǎng)路請求之后
*/
@Override
public void onAfter() {
CProgressDialogUtils.cancelProgressDialog(MainActivity.this);
}
/**
* 沒有新版本
*/
@Override
public void noNewApp() {
Toast.makeText(MainActivity.this, "沒有新版本", Toast.LENGTH_SHORT).show();
}
});