在这个极速开发,快速迭代的年代里,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等 有兴趣的可以补上去。。
还有 谁能告诉我 为什么我的截图这么大