App版本更新

1.添加依賴:

compile 'org.xutils:xutils:3.5.0'
compile 'com.google.code.gson:gson:2.8.1'

2.初始化xutils
public class BaseApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        x.Ext.init(this);
        x.Ext.setDebug(BuildConfig.DEBUG);
    }
}

3.定義一個獲取version的工具類:


public class VersionUtils {

    /**
     * 獲取應用的版本
     */

    public static int getVersionCode(Context context) {
        int versionCode = 0;
        try {
            PackageManager packageManager = context.getPackageManager();
            String packageName = context.getPackageName();
            PackageInfo packageInfo = packageManager.getPackageInfo(packageName, 0);
            versionCode = packageInfo.versionCode;

        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return versionCode;
    }
}

4.Bean類

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;
    }
}


5.MainActivity 頁面代碼


public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button check;
    private String url="http://172.18.47.57/checkversion.php";
    private static final String TAG = "MainActivity";
    private ProgressDialog progressDialog;
    // 文件保存地址
    private String targetPath = "";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        x.view().inject(this);

        check= (Button) findViewById(R.id.btn_check_version);
        //版本更新的監聽事件
        check.setOnClickListener(this);

        //設置sdcard的根路徑
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            File file = Environment.getExternalStorageDirectory();
            targetPath = file.getAbsolutePath() + File.separator;
        }

        progressDialog = new ProgressDialog(this);
        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

    }

    @Override
    public void onClick(View v) {

        //檢查版本號
        checkVersion();
    }

    private void checkVersion() {

        //獲得自己app當前的版本號,用來和服務器的版本進行對比
       final  int code = VersionUtils.getVersionCode(this);

        RequestParams params=new RequestParams(url);
        params.addQueryStringParameter("version",String.valueOf(code));

        x.http().get(params, new Callback.CommonCallback<String>() {

            @Override
            public void onSuccess(String result) {

                if (result!=null){
                    Log.i(TAG, "onSuccess: " + 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.isMustUpdate()){
                           //強制更新
                           new AlertDialog.Builder(MainActivity.this)
                                   .setTitle("版本更新")
                                   .setMessage("強制更新到最新版本!")
                                   .setPositiveButton("確定", new DialogInterface.OnClickListener() {
                                       @Override
                                       public void onClick(DialogInterface dialog, int which) {
                                           updateVersion(version.getUrl());
                                           dialog.dismiss();
                                       }
                                   })
                                   //不可取消
                                   .setCancelable(false)
                                   .create().show();

                        }else if(version.isHasNewVersion()){
                            //選擇更新
                            new AlertDialog.Builder(MainActivity.this)
                                    .setTitle("版本更新")
                                    .setMessage("是否要升級到最新版本")
                                    .setPositiveButton("確定", new DialogInterface.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface dialog, int which) {
                                            updateVersion(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 updateVersion(String url) {
        //下載的app文件名:當前時間.apk
        targetPath = targetPath + System.currentTimeMillis() + ".apk";
        RequestParams params = new RequestParams(url);
        // 設置下載保存路徑
        params.setSaveFilePath(targetPath);
        // xutils的文件下載
        x.http().get(params, new Callback.ProgressCallback<File>() {
            @Override
            public void onSuccess(File result) {
                if (progressDialog.isShowing()) {
                    progressDialog.dismiss();
                }

                //自動安裝app的方法
                installApk(result);
            }

            @Override
            public void onError(Throwable ex, boolean isOnCallback) {
                if (progressDialog.isShowing()) {
                    progressDialog.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) {
                    progressDialog.setMessage("正在下載...");
                    progressDialog.show();
                    progressDialog.setMax((int) total);
                    progressDialog.setProgress((int) current);
                }
            }
        });

    }

    private void installApk(File file) {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        intent.addCategory("android.intent.category.DEFAULT");
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
        startActivity(intent);
        android.os.Process.killProcess(android.os.Process.myPid());
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章