对版本更新的管理

来源:互联网 发布:浏览器无法连接网络 编辑:程序博客网 时间:2024/05/21 17:50
public class BaseApplication extends Application {
    @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;
    }
}

原创粉丝点击