国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

android實(shí)現(xiàn)軟件自動更新的步驟

2019-10-22 18:11:47
字體:
供稿:網(wǎng)友

本篇文章是直接下載最新的APK安裝的方法,并不是增量下載該APk。

想要實(shí)現(xiàn)一個android應(yīng)用,自動更新下載APK軟件的方法,我采取的是以下幾步方法:

1.每次進(jìn)入主界面時,獲取服務(wù)器的數(shù)據(jù),看是否是最新版本,是,則無操作,否,則進(jìn)行以下步驟;

2.彈出是否更新軟件的對話框,點(diǎn)擊下載后

3.彈出下載的進(jìn)度條的對話框,開始下載,可以上隨時點(diǎn)擊按鈕,停止下載

4.下載完成后,調(diào)用系統(tǒng)安裝軟件的服務(wù),安裝軟件

效果圖:

 android,軟件自動更新,android軟件更新,android軟件自動更新步驟

 android,軟件自動更新,android軟件更新,android軟件自動更新步驟

實(shí)現(xiàn)過程:  

新建一個UpdateManager方法,具體內(nèi)容我已經(jīng)有詳細(xì)的注釋

package lgx.acc.updatedemo;  import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL;  import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.Handler; import android.view.LayoutInflater; import android.view.View; import android.widget.ProgressBar; import android.widget.TextView;  public class UpdateManager {  // 應(yīng)用程序Context  private Context mContext;  // 是否是最新的應(yīng)用,默認(rèn)為false  private boolean isNew = false;  private boolean intercept = false;  // 下載安裝包的網(wǎng)絡(luò)路徑  private String apkUrl = "http://shouji.360tpcdn.com/360sj/tpi/20130201/"    + "com.flikie.wallpapers.gallery_4.apk";  // 保存APK的文件夾  private static final String savePath = "/sdcard/updatedemo/";  private static final String saveFileName = savePath    + "UpdateDemoRelease.apk";  // 下載線程  private Thread downLoadThread;  private int progress;// 當(dāng)前進(jìn)度  TextView text;  // 進(jìn)度條與通知UI刷新的handler和msg常量  private ProgressBar mProgress;  private static final int DOWN_UPDATE = 1;  private static final int DOWN_OVER = 2;   public UpdateManager(Context context) {   mContext = context;  }   /**   * 檢查是否更新的內(nèi)容   */  public void checkUpdateInfo() {   //這里的isNew本來是要從服務(wù)器獲取的,我在這里先假設(shè)他需要更新   if (isNew) {    return;   } else {    showUpdateDialog();   }  }   /**   * 顯示更新程序?qū)υ捒颍┲鞒绦蛘{(diào)用   */  private void showUpdateDialog() {   AlertDialog.Builder builder = new AlertDialog.Builder(mContext);   builder.setTitle("軟件版本更新");   builder.setMessage("有最新的軟件包,請下載!");   builder.setPositiveButton("下載", new DialogInterface.OnClickListener() {     @Override    public void onClick(DialogInterface dialog, int which) {     showDownloadDialog();    }    });   builder.setNegativeButton("以后再說",     new DialogInterface.OnClickListener() {       @Override      public void onClick(DialogInterface dialog, int which) {       dialog.dismiss();      }     });    builder.create().show();  }   /**   * 顯示下載進(jìn)度的對話框   */  private void showDownloadDialog() {   AlertDialog.Builder builder = new AlertDialog.Builder(mContext);   builder.setTitle("軟件版本更新");   LayoutInflater inflater = LayoutInflater.from(mContext);   View v = inflater.inflate(R.layout.progress, null);   mProgress = (ProgressBar) v.findViewById(R.id.progress);    builder.setView(v);   builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {     @Override    public void onClick(DialogInterface dialog, int which) {     intercept = true;    }   });   builder.show();   downloadApk();  }   /**   * 從服務(wù)器下載APK安裝包   */  private void downloadApk() {   downLoadThread = new Thread(mdownApkRunnable);   downLoadThread.start();  }   private Runnable mdownApkRunnable = new Runnable() {    @Override   public void run() {    URL url;    try {     url = new URL(apkUrl);     HttpURLConnection conn = (HttpURLConnection) url       .openConnection();     conn.connect();     int length = conn.getContentLength();     InputStream ins = conn.getInputStream();     File file = new File(savePath);     if (!file.exists()) {      file.mkdir();     }     File apkFile = new File(saveFileName);     FileOutputStream fos = new FileOutputStream(apkFile);     int count = 0;     byte[] buf = new byte[1024];     while (!intercept) {      int numread = ins.read(buf);      count += numread;      progress = (int) (((float) count / length) * 100);       // 下載進(jìn)度      mHandler.sendEmptyMessage(DOWN_UPDATE);      if (numread <= 0) {       // 下載完成通知安裝       mHandler.sendEmptyMessage(DOWN_OVER);       break;      }      fos.write(buf, 0, numread);     }     fos.close();     ins.close();     } catch (Exception e) {     e.printStackTrace();    }   }  };   /**   * 安裝APK內(nèi)容   */  private void installAPK() {   File apkFile = new File(saveFileName);   if (!apkFile.exists()) {    return;   }   Intent intent = new Intent(Intent.ACTION_VIEW);   intent.setDataAndType(Uri.parse("file://" + apkFile.toString()),     "application/vnd.android.package-archive");   mContext.startActivity(intent);  };   private Handler mHandler = new Handler() {   public void handleMessage(android.os.Message msg) {    switch (msg.what) {     case DOWN_UPDATE:     mProgress.setProgress(progress);     break;     case DOWN_OVER:     installAPK();     break;     default:     break;    }   }   }; } 

還有progressBar.xml的具體代碼

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:orientation="vertical" >   <ProgressBar   android:id="@+id/progress"   style="?android:attr/progressBarStyleHorizontal"   android:layout_width="fill_parent"   android:layout_height="wrap_content" /> </LinearLayout> 

 之后在MainActivity的onCreate方法中,調(diào)用一下代碼即可

UpdateManager manager=new UpdateManager(MainActivity.this);   manager.checkUpdateInfo(); 

一定要記得在manifest里面加權(quán)限哈,

<uses-permission android:name="android.permission.INTERNET"/>  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

 最后效果就出來了。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 家居| 英山县| 抚宁县| 高雄市| 淮滨县| 大同市| 紫阳县| 三江| 龙门县| 崇明县| 富顺县| 云梦县| 新龙县| 红河县| 云南省| 隆德县| 聂荣县| 惠安县| 安新县| 西吉县| 宝丰县| 灌云县| 邵阳县| 前郭尔| 时尚| 南岸区| 涿州市| 大城县| 湘潭市| 格尔木市| 宣化县| 疏勒县| 秦安县| 乌鲁木齐县| 安岳县| 电白县| 吉木乃县| 邹城市| 绥阳县| 嘉黎县| 黄梅县|