Android 自動更新 教你如何寫自己的更新



  在這個極速開發,快速迭代的年代裏,APP的更新自然也成爲日常開發中不可或缺的一部分,一直站在我們身後的友盟也要在9月份停止自動更新了 SO,如何寫出一個優雅的更新效果,讓自己的APP增新不少呢?下面帶大家來一起寫一個APP更新的功能.


  其實這個功能很簡單,,,,就是一個文件上傳下載的功能 文件的地址就是放在你們服務器上面的路徑,你請求後臺的版本號和本地的版本號進行對比,如果比服務器上的低就調用,然後下載的下來的地方是你設置的路徑,然後調用系統的安裝功能就Ok


github : https://github.com/mirsfang/UpdateApk








//下載的主要方法

    private Runnable mdownApkRunnable = new Runnable() {
        @Override
        public void run() {
            try {
                File file = new File(savePath);
                if (!file.exists()) {
                    file.mkdirs();
                }
                String apkFile = saveFileName;
                File ApkFile = new File(apkFile);
                FileOutputStream fos = new FileOutputStream(ApkFile);
                
                URL url = new URL(apkUrl);
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.connect();
                apkLength = conn.getContentLength();
                System.out.println();
                InputStream is = conn.getInputStream();
                apkCurrentDownload = 0;
                byte buf[] = new byte[1024];
                int length = -1 ;
                while((length = is.read(buf))!=-1){
                	 apkCurrentDownload += length;
                     progress = (int) (((float) apkCurrentDownload / apkLength) * 100);
                     //更新進度   
                     mHandler.sendEmptyMessage(DOWN_UPDATE);
                     fos.write(buf, 0, length);
                     if (apkCurrentDownload == apkLength) {
                         //下載完成通知安裝   
                         mHandler.sendEmptyMessage(DOWN_OVER);
                         break;
                     }
                     if(interceptFlag ){
                    	 ApkFile.delete();
                    	 break;
                     }
                }
                fos.close();
                is.close();
            }catch (IOException e) {
                e.printStackTrace();
            }

        }
    };


  上面可以看到,就是使用HttpUrlConnection 來下載自己的APK  通過Handler通知進度更新

然後下載好apk之後調用系統的安裝功能

 /**
     * 安裝apk
     *
     * @param
     */
    private void installApk() {
        File apkfile = new File(saveFileName);
        if (!apkfile.exists()) {
            return;
        }
        Intent i = new Intent(Intent.ACTION_VIEW);
        i.setDataAndType(Uri.parse("file://" + apkfile.toString()), "application/vnd.android.package-archive");
        mContext.startActivity(i);
        try {
            if (downloadDialog!=null&&downloadDialog.isShowing())
            downloadDialog.dismiss();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

然後APK 就自動安裝了  核心功能就這麼兩點,


然後我們再用 RoundCornerProgressBar  來對下載的進度條進行美化,一個漂亮的進度條就誕生了  。。。  就是這麼EASY   Are you  OK?


可擴展 但是沒來得及寫    如果是root的話靜默安裝   檢測是否是WIFI環境 ,安裝之後刪除APK等 有興趣的可以補上去。。


還有 誰能告訴我  爲什麼我的截圖這麼大

   








發佈了58 篇原創文章 · 獲贊 20 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章