对版本更新的管理
来源:互联网 发布:浏览器无法连接网络 编辑:程序博客网 时间:2024/05/21 17:50
@Override
public void onCreate() {
super.onCreate();
x.Ext.init(this);
x.Ext.setDebug(BuildConfig.DEBUG);
}
}
public class CheckUtils {
public static int getVersion(Context context){
int versioncode=0;
try {
PackageManager manager = context.getPackageManager();
String packageName = context.getPackageName();
PackageInfo packageInfo = manager.getPackageInfo(packageName,0);
versioncode = packageInfo.versionCode;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return versioncode;
}
}
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button checkVersionCode;
private String url="服务器接口";
private String targetpath="";
private ProgressDialog progress;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkVersionCode= (Button) findViewById(R.id.check_version);
checkVersionCode.setOnClickListener(this);
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
File file = Environment.getExternalStorageDirectory();
targetpath = file.getAbsolutePath() + File.separator;
}
progress=new ProgressDialog(this);
progress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
}
@Override
public void onClick(View v) {
checkVersion();
}
private void checkVersion() {
int versionCode = CheckUtils.getVersion(this);
RequestParams params=new RequestParams(url);
params.addQueryStringParameter("version",String.valueOf(versionCode));
x.http().get(params, new Callback.CommonCallback<String>() {
@Override
public void onSuccess(String result) {
Gson gson=new Gson();
Type type = new TypeToken<MessageBean<Version>>() {
}.getType();
MessageBean<Version> messageBean = gson.fromJson(result, type);
if (messageBean.isSuccess()){
final Version version=messageBean.getResult();
if (version.isHasNewVersion()) {
if (version.isMustUpdate()){
new AlertDialog.Builder(MainActivity.this).setTitle("版本更新")
.setMessage("升级到最新版本")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
updataVersion(version.getUrl());
dialog.dismiss();
}
}).setCancelable(false)
.create().show();
}else {
new AlertDialog.Builder(MainActivity.this).setTitle("版本更新")
.setMessage("升级到最新版本")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
updataVersion(version.getUrl());
dialog.dismiss();
}
}).setNegativeButton("下次再说", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).create().show();
}
}else {
Toast.makeText(MainActivity.this, "当前已是最新版本", Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
});
}
private void updataVersion(String url) {
targetpath=targetpath+System.currentTimeMillis()+".apk";
RequestParams params=new RequestParams(url);
//设置下载保存路径
params.setSaveFilePath(targetpath);
x.http().get(params, new Callback.ProgressCallback<File>() {
@Override
public void onSuccess(File result) {
if (progress.isShowing()){
progress.dismiss();
}
installAPK(result);
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
if (progress.isShowing()){
progress.dismiss();
}
Toast.makeText(MainActivity.this, "下载失败", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
@Override
public void onWaiting() {
}
@Override
public void onStarted() {
}
@Override
public void onLoading(long total, long current, boolean isDownloading) {
if (isDownloading){
progress.setMessage("正在下载");
progress.show();
progress.setProgress((int) current);
progress.setMax((int) total);
}
}
});
}
private void installAPK(File file) {
Intent intent=new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
android.os.Process.killProcess(android.os.Process.myPid());
}
}
public class MessageBean<T> {
private boolean success;
private String message;
private T result;
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getResult() {
return result;
}
public void setResult(T result) {
this.result = result;
}
}
public class Version {
@SerializedName("has_new_version")
private boolean hasNewVersion;
@SerializedName("must_update")
private boolean mustUpdate;
private String url;
public boolean isHasNewVersion() {
return hasNewVersion;
}
public void setHasNewVersion(boolean hasNewVersion) {
this.hasNewVersion = hasNewVersion;
}
public boolean isMustUpdate() {
return mustUpdate;
}
public void setMustUpdate(boolean mustUpdate) {
this.mustUpdate = mustUpdate;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
- 对版本更新的管理
- 版本更新管理
- Gradle对多版本项目的管理
- Alembic对数据库版本管理的使用方法
- TortoiseGit 对 github 版本库的管理
- 如何对Android的版本进行检测与更新
- 对于unity3d 对于热更新的思考!!!(版本管理)
- iOS Git代码管理-对重大更新版本做标定,注tag
- hudson+svn对jobs配置文件的版本管理
- 如何方便的对Matlab中的代码进行版本管理
- Untiy3D的版本更新
- VLINK 的更新版本
- Android 版本的更新
- 更新php的版本
- 应用程序的版本更新
- 更新CocoaPods的版本
- App版本的更新
- apk的版本更新
- 3DS文件解析(C++版)
- SpringBoot简介
- Android中全屏或者取消标题栏
- FTP的搭建与虚拟目录作用<之简单讲解>
- iOS XCTest UiTesting: Apple Mach-o linker error use -v to see invocation
- 对版本更新的管理
- Spring Web MVC简介 、基于XML配置的MVC应用 、基于注解配置的MVC应用
- 07. DNS 域名解析 ❀ 数据包分析工具 Wireshark
- crond和crontab调研
- 通过request_irq 申请的irq,默认是可以运行在所有online的cpu上
- Mysql存储过程基础
- OpenJudge-2152:Pots
- 几种任务调度的 Java 实现方法与比较
- error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏