MainActivity.java
使用Update工具类,app_down_id是后台对应项目的更新序号(按照自己项目是否需要这个进行选择)
protected void onResume() {
super.onResume();
Update.CheckUpdate(this, getResources().getString(R.string.app_down_id), true);
}
Update.java
private static UpdateApplicationDialog updateApplicationDialog;//自定义的更新弹框
//IsInstall:app是否安装过(一般都为true,除非新用户)
public static void CheckUpdate(final Context mContext, String app_update_id, final boolean IsInstall) {
updateApplicationDialog = new UpdateApplicationDialog(mContext);//初始化更新弹框
TreeMap<String, String> map = new TreeMap<String, String>();
map.put("app_id", app_update_id);//请求参数
RequestParams params = getGLKTRequestParams(“http:/123456/改为自己的更新地址url", map);
x.http().post(params, new Callback.CommonCallback<String>() {
public void onSuccess(String r) {
try {
String result=getResponseDataBean(r);//解析Json
UpdateInfoBean updateInfoBean = new Gson().fromJson(result, UpdateInfoBean.class);
int currentVersion = CommonUtil.getCurrentVersion(mContext);//获取当前版本
if (!TextUtils.isEmpty(updateInfoBean.data.versions) && Float.valueOf(updateInfoBean.data.versions) > currentVersion) {//前后两个版本进行对比
if (IsInstall) {
if (Float.valueOf(updateInfoBean.data.versions) > Float.valueOf(CommonUtil.getCurrentVersion(mContext))) {
updateApplicationDialog.setDownloadInfo(updateInfoBean.data.apk_url,"", updateInfoBean.data.name, updateInfoBean.data.ver_desc,null,0);
if (updateApplicationDialog != null && !updateApplicationDialog.isShowing()) {
updateApplicationDialog.initReset();
updateApplicationDialog.show();
}
}
}
}catch (Exception e) {
e.printStackTrace();
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
ex.printStackTrace();
}
@Override
public void onCancelled(CancelledException cex) {
cex.printStackTrace();
}
@Override
public void onFinished() {
}
}
});
}
剩下的就是工具方法了。
public static RequestParams getGLKTRequestParams(String url, TreeMap<String, String> treeMap ) {
RequestParams requestParams = new RequestParams(url);
requestParams.setCancelFast(true);
requestParams.setAsJsonContent(true);
if (treeMap != null) {
JsonObject originalRequestParams=new JsonObject(); //原始请求参数
for (TreeMap.Entry<String, String> entry : treeMap.entrySet()) {
if (entry.getValue() != null && !entry.getValue().equals("")) {
originalRequestParams.addProperty(entry.getKey(),entry.getValue());
}
}
JsonObject requestParamsObject=new JsonObject();
requestParamsObject.addProperty("data", Base64.encodeToString(originalRequestParams.toString().getBytes(), Base64.NO_WRAP));
requestParamsObject.addProperty("sign",md5(getParametersAnds(treeMap)+KEY_GLKT ));
requestParams.setBodyContent(requestParamsObject.toString());
} else {
}
return requestParams;
}
public static String getParametersAnds(TreeMap<String, String> treeMap) {
StringBuilder sb = new StringBuilder();
WeakReference<StringBuilder> wrSB = new WeakReference<StringBuilder>(sb);
for (TreeMap.Entry<String, String> entry : treeMap.entrySet()) {
if (entry.getValue() != null && !entry.getValue().equals("")) {
if (wrSB.get().toString().equals("")){
wrSB.get().append(entry.getValue());
}else {
wrSB.get().append(","+entry.getValue());
}
}
// LogTool.e("res", "key:" + entry.getKey() + "value:" + entry.getValue());
}
return wrSB.get().toString();
}
/**
* 获取响应dataString
* @param result
* @return
*/
public static String getResponseDataBean(String result){
return new String(Base64.decode(gsonToBean(result,RDataBean.class).data, Base64.NO_WRAP));
}
public class RDataBean {
public String data;
public String sign;
}
``/**
* MD5加密
*
* @param paramString
* @return
*/
private static String md5(String paramString) {
String returnStr;
try {
MessageDigest localMessageDigest = MessageDigest.getInstance("MD5");
localMessageDigest.update(paramString.getBytes());
returnStr = byteToHexString(localMessageDigest.digest());
return returnStr;
} catch (Exception e) {
return paramString;
}
}
/**
* 将指定byte数组转换成16进制字符串
*
* @param b
* @return
*/
private static String byteToHexString(byte[] b) {
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
hex = ’0’ + hex;
}
hexString.append(hex.toLowerCase());
}
return hexString.toString();
}
UpdateApplicationDialog.java(自定义弹框类)
在里面实现这接口(RedirectHandler是解决重定向问题)就可以了
Callback.ProgressCallback<File>, RedirectHandler