Android 自动更新 教你如何写自己的更新

来源:互联网 发布:淘宝怎么提高收藏宝贝 编辑:程序博客网 时间:2024/06/11 18:07


  在这个极速开发,快速迭代的年代里,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等 有兴趣的可以补上去。。


还有 谁能告诉我  为什么我的截图这么大

   








0 0