在這個極速開發,快速迭代的年代裏,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等 有興趣的可以補上去。。
還有 誰能告訴我 爲什麼我的截圖這麼大