Android 版本更新

704 阅读2分钟
XUpdate.get()
.debug(true)
.isWifiOnly(true)//默认设置只在wifi下检查版本更新        
.isGet(true)//默认设置使用get请求检查版本        
.isAutoMode(false)//默认设置非自动模式,可根据具体使用配置        
.param("versionCode", UpdateUtils.getVersionCode(this))//设置默认公共请求参数        
.param("appKey", getPackageName())
.setOnUpdateFailureListener(new OnUpdateFailureListener() {     
//设置版本更新出错的监听            
@Override            
public void onFailure(UpdateError error) {
            
}})        
.supportSilentInstall(true) //设置是否支持静默安装,默认是true        
.setIUpdateHttpService(new OKHttpUpdateHttpService()) //这个必须设置!实现网络请求功能。        .init(this);

implementation 'com.github.xuexiangjys:XUpdate:2.0.7'
implementation 'com.zhy:okhttputils:2.6.2'

XUpdate.newBuild(mContext)        
.updateUrl("https:") //版本信息 Json       
.promptThemeColor(Color.parseColor("#33B663"))        
.promptButtonTextColor(Color.WHITE)        
.promptTopResId(R.mipmap.ic_update)  //弹窗图片  dialog根据弹窗图片大小显示    
.promptWidthRatio(0.7F)        
.update();

{ "Code": 0, //0代表请求成功,非0代表失败 

 "Msg": "", //请求出错的信息 

 "UpdateStatus": 1, //0代表不更新,1代表有版本更新,不需要强制升级,2代表有版本更新,需要强制升级 

 "VersionCode": 2,   //要比Gradle里面的大 

 "VersionName": "1.0.2", 

 "ModifyContent": "1、功能修改。\r\n2、界面调整。", 

 "DownloadUrl": "https:",  //APK存放地址

 "ApkSize": 6970, 

 "ApkMd5": "" }

public class OKHttpUpdateHttpService implements IUpdateHttpService {    
private boolean mIsPostJson;    
public OKHttpUpdateHttpService() {
        this(false);    
}    
public OKHttpUpdateHttpService(boolean isPostJson) {  
      mIsPostJson = isPostJson;    
}   

@Override    
public void asyncGet(@NonNull String url, @NonNull Map<String, Object> params, final @NonNull Callback callBack) {
   OkHttpUtils.get()
  .url(url)
  .params(transform(params))               
  .build()                
  .execute(new StringCallback() {

@Override
public void onError(Call call, Exception e, int id) {
callBack.onError(e);                    
}                    

@Override                    
public void onResponse(String response, int id) {                        
callBack.onSuccess(response);                    
}                
});    
}    

@Override    
public void asyncPost(@NonNull String url, @NonNull Map<String, Object> params, final @NonNull Callback callBack) {        
//这里默认post的是Form格式,使用json格式的请修改 post -> postString        
RequestCall requestCall;       
 if (mIsPostJson) {            
    requestCall = OkHttpUtils.postString()                    
    .url(url)                    
    .content(UpdateUtils.toJson(params))                    
    .mediaType(MediaType.parse("application/json; charset=utf-8"))                    
    .build();        
} else {            
    requestCall = OkHttpUtils.post()                    
    .url(url)                    
    .params(transform(params))                    
    .build();        
}       
 requestCall                
         .execute(new StringCallback() {                    
         @Override                    
         public void onError(Call call, Exception e, int id) {                        
         callBack.onError(e);                    
         }                   
         @Override                    
         public void onResponse(String response, int id) {                        
         callBack.onSuccess(response);                   
          }                
 });   
 }   

@Override    
public void download(@NonNull String url, @NonNull String path, @NonNull String fileName, final @NonNull DownloadCallback callback) {        
    OkHttpUtils.get()                
    .url(url)                
    .tag(url)                
    .build()                
    .execute(new FileCallBack(path, fileName) {                    
        @Override                    
        public void inProgress(float progress, long total, int id) { 
        callback.onProgress(progress, total);                    
      }                    
        @Override                    
        public void onError(Call call, Exception e, int id) {                        
        callback.onError(e);                    
       }                    
        @Override                    
        public void onResponse(File response, int id) {                        
        callback.onSuccess(response);                    
        }                    
        @Override                    
        public void onBefore(Request request, int id) {                        
            super.onBefore(request, id);                        
            callback.onStart();                    
        }                
 });    
}    

@Override    
public void cancelDownload(@NonNull String url) {        
    OkHttpUtils.getInstance().cancelTag(url);    
}    
private Map<String, String> transform(Map<String, Object> params) {        
    Map<String, String> map = new TreeMap<>();        
    for (Map.Entry<String, Object> entry : params.entrySet()) {            
         map.put(entry.getKey(), entry.getValue().toString());        
    }       
  return map;    
}
}

原版Github:github.com/xuexiangjys…