1. 程式人生 > >Android----- 版本更新和 伺服器下載新版本APK並安裝

Android----- 版本更新和 伺服器下載新版本APK並安裝

前段時間有朋友問我版本更新的問題,所以來寫一篇版本更新和APK下載並安裝的部落格。

版本更新,幾乎在所有的專案中都用的到,一般是這樣的流程,當進入APP首頁是便會檢測版本是否為最新版本,不是則提示你下載更新;

版本更新需要後臺和移動端共同來完成,後臺一般用一個介面 來返回給移動端最新版本的資訊,移動端接收資訊後和APP自身版本比較,如果不相同則提示使用者更新 APP。

所以當移動端開發者做完並更新版本後 打包提交到後臺,後臺更新APP版本資訊,就可以完成版本更新了。

看看我的專案的效果圖:

   

首頁進來開始檢測  提示更新APP,點選確定,下載APK檔案,之後跳轉安裝見面,點選安裝,安裝完成後,清除安裝包。

獲取移動端版本號

/****
     * 獲取移動端版本號
     * 格式可根據比較方式自己設定
     *
     * @param activity
     * @return
     */
    public static final String getVersion(Activity activity) {
        try {
            PackageManager manager = activity.getPackageManager();
            PackageInfo info = manager.getPackageInfo(activity.getPackageName(), 0);
            String version =info.versionCode+"."+info.versionName;
            return  version;
        } catch (Exception e) {
            return "";
        }
    }

網路請求資料解析比較,彈框提示 下載更新
 String version="伺服器版本";
 if (!version.equals(Util.getVersion(MainActivity.this))){
        centerDialog = new CenterDialog(MainActivity.this,
          R.layout.dialog_center_layout, new int[]{R.id.dialog_cancel, R.id.dialog_sure},
          "伺服器APK下載連結");
        centerDialog.setOnCenterItemClickListener(MainActivity.this);
        centerDialog.show();
    }

之後就根據連結,下載APK,並安裝

/****
     * 伺服器下載APK檔案
     * @param context
     * @param url
     */
    public static void showDownloadAPK(final Context context, final String url) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                OkHttpUtils
                        .get()
                        .url(url)
                        .build()
                        .execute(new FileCallBack(Environment.getExternalStorageDirectory().getAbsolutePath(),"cg.apk") {//儲存路徑      APK名稱
                            @Override
                            public void onError(Call call, Exception e, int id) {
                            }

                            @Override
                            public void inProgress(float progress, long total, int id) {
                                super.inProgress(progress, total, id);
                            }

                            @Override
                            public void onResponse(File response, int id) {
                                showSelectAPK(context);
                            }
                        });
            }
        }).start();

    }

安裝APK

 /***
     * 調起安裝APP視窗  安裝APP
     * @param context
     */
    private static void showSelectAPK(Context context){
        File fileLocation = new File(Environment.getExternalStorageDirectory(), "cg.apk");//APK名稱
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setDataAndType(Uri.fromFile(fileLocation), "application/vnd.android.package-archive");
        context.startActivity(intent);
    }


我的程式碼是寫的比較簡單,不過功能是可以實現的,你可以自己封裝。

網路請求和下載檔案可用於其他方式實現,測試介面我刪除了的,

有問題可以掃頭像加新建立的群@我 

 原始碼下載